在经典的JDBC用法中,SQL参数是用占位符?表示,并且收到位置的限制,定位参数的问题在于,一旦参数的顺序发生变化,就必须改变参数绑定。
在SpringJDBC框架中,绑定SQL参数的另一种选择是使用具名参数(named parameter),SQL按名称(以冒号开头)进行指定
代码语言:javascript复制 <!--导入资源文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置c3p0数据源-->
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="User" value="${jdbc.user}"/>
<property name="Password" value="${jdbc.password}"/>
<property name="DriverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
<property name="InitialPoolSize" value="${jdbc.initPoolSize}"/>
<property name="MaxPoolSize" value="${jdbc.maxPoolSize}"/>
</bean>
<!--配置NamedParameterJdbcTemplate,该对象可以使用具名参数,其没有无参数的构造器,所以必须为其构造器指定参数-->
<bean id = "namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="datasource"></constructor-arg>
</bean>
代码语言:javascript复制public class JDBCTest {
private ApplicationContext ctx;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
namedParameterJdbcTemplate = (NamedParameterJdbcTemplate)ctx.getBean("namedParameterJdbcTemplate");
}
/**
* 可以为参数命名
* 使用具名参数时,SQL语句中的参数名和类的属性一致
*/
@Test
public void testNamedParameterJdbcTemplate(){
String sql = "INSERT INTO employees(last_name,email) VALUES(:ln,:email)";
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("ln","cc");
paramMap.put("email","cc@cc.com");
namedParameterJdbcTemplate.update(sql,paramMap);
}