博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring NamedParameterJdbcTemplate 详解
阅读量:6696 次
发布时间:2019-06-25

本文共 2966 字,大约阅读时间需要 9 分钟。

转自: 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
paramMap = new HashMap
();12 paramMap.put("name", "name5");13 namedParameterJdbcTemplate.update(insertSql, paramMap);14 final List
result = new ArrayList
();15 namedParameterJdbcTemplate.query(selectSql, paramMap,16 new RowCallbackHandler() {17 @Override18 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实现,其就是简单封装.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

你可能感兴趣的文章
LINUX下进程打开的文件怎么和底层磁盘关联的?
查看>>
Java 设计模式之命令模式
查看>>
可能是把Java内存区域讲的最清楚的一篇文章
查看>>
PHP中的几个随机数生成函数
查看>>
Anaconda不同envs的pip和python的版本
查看>>
SQLServer之创建全文索引
查看>>
如何以并发方式在同一个流上执行多种操作?--复制流
查看>>
Spring Boot 参考指南(开发Web应用程序)
查看>>
javascript块级作用域处理闭包和释放内存的垃圾回收
查看>>
快速入门React
查看>>
正则表达式语法入门
查看>>
关于顶级、一级、二级域名如何理解?
查看>>
Laravel 5.6 正式发布(文档翻译工作将在春节后启动)
查看>>
兼容浏览器原生DOM的各种特性总结
查看>>
推荐引擎
查看>>
前端真的能做到彻底权限控制吗?
查看>>
携程对AIOps场景和算法的探索与实践
查看>>
AngularJS中$q的promise使用及链式调用传值问题
查看>>
Aop说明
查看>>
国外 服务器,阿里云海外服务器-海外节点云服务器全线2折起挺好
查看>>