时间:2021-07-01 10:21:17 帮助过:26人阅读
NamedParameterJdbcTemplate类是基于JdbcTemplate类,NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干;NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。
NamedParameterJdbcTemplate,主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。
spring配置jdbcTemplate:
(1)第一步,spring提供了类org.springframework.jdbc.core.JdbcTemplate,所以使用bean注入数据源对象:
<bean id="logJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="logDataSource" />
</bean>
(2)第二步,dao类实现类中使用注解将bean对象logJdbcTemplate注入到成员变量中:
@Autowired
protected JdbcTemplate logJdbcTemplate;
spring配置NamedParameterJdbcTemplate:
(1)第一步,spring提供了类org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate,所以使用bean注入数据源对象,不过这里是使用构造器注入的:
<bean id="logNamedJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="logDataSource"></constructor-arg>
</bean>
(2)第二步,dao类实现类中使用注解将bean对象logNamedJdbcTemplate注入到成员变量中:
@Autowired
protected NamedParameterJdbcTemplate logNamedJdbcTemplate;
- <span style="color: #000000">@Test
- </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> testNamedParameterJdbcTemplate1() {
- NamedParameterJdbcTemplate namedParameterJdbcTemplate </span>= <span style="color: #0000ff">null</span><span style="color: #000000">;
- </span><span style="color: #008000">//</span><span style="color: #008000">namedParameterJdbcTemplate =
- </span><span style="color: #008000">//</span><span style="color: #008000"> new NamedParameterJdbcTemplate(dataSource); </span>
- namedParameterJdbcTemplate =
- <span style="color: #0000ff">new</span><span style="color: #000000"> NamedParameterJdbcTemplate(jdbcTemplate);
- String insertSql </span>= <span style="color: #800000">"</span><span style="color: #800000">insert into test(name) values(:name)</span><span style="color: #800000">"</span><span style="color: #000000">;
- String selectSql </span>= <span style="color: #800000">"</span><span style="color: #800000">select * from test where name=:name</span><span style="color: #800000">"</span><span style="color: #000000">;
- String deleteSql </span>= <span style="color: #800000">"</span><span style="color: #800000">delete from test where name=:name</span><span style="color: #800000">"</span><span style="color: #000000">;
- Map</span><String, Object> paramMap = <span style="color: #0000ff">new</span> HashMap<String, Object><span style="color: #000000">();
- paramMap.put(</span><span style="color: #800000">"</span><span style="color: #800000">name</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">name5</span><span style="color: #800000">"</span><span style="color: #000000">);
- namedParameterJdbcTemplate.update(insertSql, paramMap);
- final List</span><Integer> result = <span style="color: #0000ff">new</span> ArrayList<Integer><span style="color: #000000">();
- namedParameterJdbcTemplate.query(selectSql, paramMap,
- </span><span style="color: #0000ff">new</span><span style="color: #000000"> RowCallbackHandler() {
- @Override
- </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> processRow(ResultSet rs) throws SQLException {
- result.add(rs.getInt(</span><span style="color: #800000">"</span><span style="color: #800000">id</span><span style="color: #800000">"</span><span style="color: #000000">));
- }
- });
- Assert.assertEquals(</span><span style="color: #800080">1</span><span style="color: #000000">, result.size());
- SqlParameterSource paramSource </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> MapSqlParameterSource(paramMap);
- namedParameterJdbcTemplate.update(deleteSql, paramSource);
- } </span>
接下来让我们分析一下代码吧:
1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;
2)insert into test(name) values(:name):其中“:name”就是命名参数;
3) update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;
4)query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;
5)update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装java.util.Map。
NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource:
1)java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;
2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。
使用BeanPropertySqlParameterSource封装javaBean对象传递sql参数的例子如下:
- <span style="color: #000000">package cn.javass.spring.chapter7;
- </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span><span style="color: #000000"> UserModel {
- </span><span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span><span style="color: #000000"> id;
- </span><span style="color: #0000ff">private</span><span style="color: #000000"> String myName;
- </span><span style="color: #008000">//</span><span style="color: #008000">省略getter和setter </span>
- }
- <span style="color: #000000">@Test
- </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> testNamedParameterJdbcTemplate2() {
- NamedParameterJdbcTemplate namedParameterJdbcTemplate </span>= <span style="color: #0000ff">null</span><span style="color: #000000">;
- namedParameterJdbcTemplate </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> NamedParameterJdbcTemplate(jdbcTemplate);
- UserModel model </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> UserModel();
- model.setMyName(</span><span style="color: #800000">"</span><span style="color: #800000">name5</span><span style="color: #800000">"</span><span style="color: #000000">);
- String insertSql </span>= <span style="color: #800000">"</span><span style="color: #800000">insert into test(name) values(:myName)</span><span style="color: #800000">"</span><span style="color: #000000">;
- SqlParameterSource paramSource </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> BeanPropertySqlParameterSource(model);
- namedParameterJdbcTemplate.update(insertSql, paramSource);
- } </span>
可以看出BeanPropertySqlParameterSource使用能减少很多工作量,但命名参数必须和JavaBean属性名称相对应才可以。
本文参考来自:http://blog.csdn.net/dyllove98/article/details/7772470
jdbcTemplate学习(四)
标签:tsql ram parameter proc object protect use blog void