Spring JDBC学习笔记(2):JdbcTemplate的增强版NamedParameterJdbcTemplate

时间:2021-01-07 23:19:22

上一篇我们使用了JdbcTemplate,已经基本能看到相对于JDBC比较强大的能力,但是它有一个问题很不方便,就是使用参数的占位符时,必须得按照顺序来写参数,如果顺序不对,则操作失败,这里新提供的NamedParameterJdbcTemplate可以用来解决这个问题,它提供了一个方式,可以通过参数名来映射参数而不是传统的"?"。

首先配置bean,如下所示:

NamedParameterJdbcTemplate有两个构造函数,配置分别如下:

使用DataSource初始化:

<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>

使用JdbcTemplate初始化,如果看源码可以知道实际上是通过JdbcOperations的实例来初始化的,它是JdbcTemplate的接口:

<bean id="namedParameterJdbcTemplate1"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="jdbcTemplate"></constructor-arg>
</bean>

测试代码如下:

在使用具名参数时,通过:来标明一个参数,然后通过Map来完成参数的配置。

String sql = "insert into user(username, address, age) values(:name, :address, :age)";
Map<String,Object> paramMap = new HashMap();
paramMap.put("name", "openwrt");
paramMap.put("address", "am");
paramMap.put("age", 34);
namedParameterJdbcTemplate.update(sql, paramMap);
通过NamedParameterJdbcTemplate也可以直接操作一个对象,如下所示:

String sql = "insert into user(username, address, age) values(:name, :address, :age)";
User user = new User();
user.setName("ssl");
user.setAddress("bm");
user.setAge(45);
SqlParameterSource source = new BeanPropertySqlParameterSource(user);
namedParameterJdbcTemplate.update(sql, source);
使用时参数名称要和类的字段名相一致,如果不一致也会报错。
SqlParameterSource是专门用来为NamedParameterJdbcTemplate提供参数的,通过它的一个实现类BeanPropertySqlParameterSource来提供JavaBean类的属性作为参数。

相关文章: