javascript
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屬性名稱相對應才可以。
轉載于:https://www.cnblogs.com/sharpest/p/5622884.html
總結
以上是生活随笔為你收集整理的Spring NamedParameterJdbcTemplate 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 延迟初始化(lazy pr
- 下一篇: 应对电信劫持强行插入广告的处理