Spring NamedParameterJdbcTemplate 詳解


轉自: https://zmx.iteye.com/blog/373736

NamedParameterJdbcTemplate類是基於JdbcTemplate類,並對它進行了封裝從而支持命名參數特性。

NamedParameterJdbcTemplate主要提供以下三類方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

首先讓我們看個例子吧:

 1 @Test
 2 public void testNamedParameterJdbcTemplate1() {
 3 NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;
 4 //namedParameterJdbcTemplate =
 5 //    new NamedParameterJdbcTemplate(dataSource);
 6 namedParameterJdbcTemplate =
 7 new NamedParameterJdbcTemplate(jdbcTemplate);
 8     String insertSql = "insert into test(name) values(:name)";
 9     String selectSql = "select * from test where name=:name";
10     String deleteSql = "delete from test where name=:name";
11     Map<String, Object> paramMap = new HashMap<String, Object>();
12     paramMap.put("name", "name5");
13     namedParameterJdbcTemplate.update(insertSql, paramMap);
14     final List<Integer> result = new ArrayList<Integer>();
15 namedParameterJdbcTemplate.query(selectSql, paramMap,
16 new RowCallbackHandler() {
17         @Override
18         public void processRow(ResultSet rs) throws SQLException {
19             result.add(rs.getInt("id"));
20         }
21     });
22 Assert.assertEquals(1, result.size());
23 SqlParameterSource paramSource = new MapSqlParameterSource(paramMap);
24 namedParameterJdbcTemplate.update(deleteSql, paramSource);
25 }

 

接下來讓我們分析一下代碼吧:

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對象屬性來決定命名參數的值。

 

1 package cn.javass.spring.chapter7;
2 public class UserModel {
3     private int id;
4     private String myName;   
5     //省略getter和setter     
6 }

 

 1 @Test
 2 public void testNamedParameterJdbcTemplate2() {
 3     NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;
 4     namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
 5     UserModel model = new UserModel();
 6     model.setMyName("name5");
 7     String insertSql = "insert into test(name) values(:myName)";
 8     SqlParameterSource paramSource = new BeanPropertySqlParameterSource(model);
 9     namedParameterJdbcTemplate.update(insertSql, paramSource);
10 }

 

可以看出BeanPropertySqlParameterSource使用能減少很多工作量,但命名參數必須和JavaBean屬性名稱相對應才可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM