转自: 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 详解相关推荐

  1. Spring JDBC详解

    <Spring JDBC详解> 本文旨在讲述Spring JDBC模块的用法.Spring JDBC模块是Spring框架的基础模块之一. 一.概述 在Spring JDBC模块中,所有的 ...

  2. Spring AOP详解(转载)所需要的包

    上一篇文章中,<Spring Aop详解(转载)>里的代码都可以运行,只是包比较多,中间缺少了几个相应的包,根据报错,几经百度搜索,终于补全了所有包. 截图如下: 在主测试类里面,有人怀疑 ...

  3. Spring 体系结构详解

    Spring 体系结构详解 核心容器(Core Container) Core和Beans模块提供了Spring最基础的功能,提供IOC和依赖注入特性.这里的基础概念是BeanFactory,它提供对 ...

  4. [转载]Spring配置文件详解一:

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址:Spring配置文件详解一:<context:annotation-config/>与<conte ...

  5. struts2+hibernate+spring配置详解

    #struts2+hibernate+spring配置详解 struts2+hibernate+spring配置详解 哎 ,当初一个人做好难,现在终于弄好了,希望自学这个的能少走些弯路. 以下是自己配 ...

  6. spring注解详解与用法(总览)

    这篇文章收集了我写的所有的spring注解的详细说明与用法,点击可以跳转到对应文章,此文章会不断更新 spring注解详解与用法(1)最基础也是最常见的如下所示,详情点击这里 @Controller/ ...

  7. Spring入门详解

    typora-copy-images-to: upload Spring入门详解 Spring框架是Java开发中最常用的框架,功能非常强大 源码下载:Spring Framework jar包.文档 ...

  8. Spring IoC详解

    Spring IoC详解 原文地址:Spring IoC详解 写在最前 本文将主要写Spring最核心的部分,为什么写这篇的原因也是因为在刚开始学习Spring的时候,学得太粗糙了.感觉学了个皮毛,从 ...

  9. Spring源码(八):Spring事务详解

    Spring事务详解 一.事务执行流程 二.Spring事务切面 三.事务切面的Pointcut和Advice 四.注解事务的源码分析 五.Sping事务的传播属性 六.Sping事务的异常校验 七. ...

最新文章

  1. C++11中std::condition_variable的使用
  2. hashset去重原理_Java之HashSet,Linkedset常用功能以及介绍
  3. 云数据库RDS_MySQL购买流程_以及购买步骤的建议
  4. python函数的 全局变量与局部变量
  5. [react] React怎么判断什么时候重新渲染组件呢
  6. LeetCode 980. 不同路径 III(DFS+回溯)
  7. 如何做一名优秀的电子工程师[zz]
  8. PostgreSQL高可用集群在360的落地实战
  9. 敏捷开发一千零一问系列之三:序言及解决问题的心法(共振)
  10. android地图搜索功能,[Android]百度地图POI检索
  11. 自主安全国产虚拟化平台CNware
  12. 2015计算机二级office真题,2015年计算机二级office题库及答案
  13. 仙之侠道2玖章各个任务详情_仙之侠道2玖章
  14. 架构师的 36 项修炼第07讲:高性能系统架构设计
  15. PC VR游戏的CPU性能分析与优化
  16. 详解Mybatis中的resultType和resultMap
  17. 学术圈的人是如何赚钱的?
  18. 青柠网络验证远程api使用方法
  19. Redis 水滴石穿之(一)初识
  20. 实践是检验理论的唯一方法

热门文章

  1. 终于装上了office2010
  2. LBWE 和SBIW的关系
  3. C/C++中的指针变量可以相互赋值,使得它们指向同一块地址空间
  4. 使用Altera综合工具Quartus II下载到FPGA时无法识别USB-Blaster问题
  5. Android NDK开发之旅34 NDK 手把手带你入门直播技术
  6. 如何编写和应用Java的自定义异常类
  7. 《VMware Virtual SAN权威指南》一3.10.3 缓存设备与容量设备的比率
  8. python3 的 zip
  9. Nexus刷官方下载的映像_occam
  10. linux查看内核版本、系统版本、系统位数(32/64)