Spring 的 NamedParameterJdbcTemplate(转)
NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。
NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。
首先让我们看个例子吧:
- @Test
- public void testNamedParameterJdbcTemplate1() {
- NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;
- //namedParameterJdbcTemplate =
- // new NamedParameterJdbcTemplate(dataSource);
- namedParameterJdbcTemplate =
- new NamedParameterJdbcTemplate(jdbcTemplate);
- String insertSql = "insert into test(name) values(:name)";
- String selectSql = "select * from test where name=:name";
- String deleteSql = "delete from test where name=:name";
- Map<String, Object> paramMap = new HashMap<String, Object>();
- paramMap.put("name", "name5");
- namedParameterJdbcTemplate.update(insertSql, paramMap);
- final List<Integer> result = new ArrayList<Integer>();
- namedParameterJdbcTemplate.query(selectSql, paramMap,
- new RowCallbackHandler() {
- @Override
- public void processRow(ResultSet rs) throws SQLException {
- result.add(rs.getInt("id"));
- }
- });
- Assert.assertEquals(1, result.size());
- SqlParameterSource paramSource = new MapSqlParameterSource(paramMap);
- namedParameterJdbcTemplate.update(deleteSql, paramSource);
- }
接下来让我们分析一下代码吧:
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对象属性来决定命名参数的值。
- package cn.javass.spring.chapter7;
- public class UserModel {
- private int id;
- private String myName;
- //省略getter和setter
- }
- @Test
- public void testNamedParameterJdbcTemplate2() {
- NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;
- namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
- UserModel model = new UserModel();
- model.setMyName("name5");
- String insertSql = "insert into test(name) values(:myName)";
- SqlParameterSource paramSource = new BeanPropertySqlParameterSource(model);
- namedParameterJdbcTemplate.update(insertSql, paramSource);
- }
可以看出BeanPropertySqlParameterSource使用能减少很多工作量,但命名参数必须和JavaBean属性名称相对应才可以。
Spring 的 NamedParameterJdbcTemplate(转)的更多相关文章
- Spring JDBC NamedParameterJdbcTemplate类示例
org.springframework.jdbc.core.NamedParameterJdbcTemplate类是一个具有基本JDBC操作的模板类,允许使用命名参数而不是传统的’?‘占位符. 这个类 ...
- Spring的NamedParameterJdbcTemplate的简单使用
原文地址:https://www.iteye.com/blog/itommy-2354746 Spring JDBC包提供了JdbcTemplate和它的两个兄弟SimpleJdbcTemplate和 ...
- spring框架学习之--数据库操作增删改查
基于spring的NamedParameterJdbcTemplate操作数据库 首先在 resources 文件夹下添加数据库配置文件jdbc.properties 配置常用的数据库信息 consu ...
- Spring+Druid+SpringMVC的搭建(附Demo)
最近公司事情比较少,便想利用这段空闲时间做一个自己的博客. 前端界面已经搞好,感谢杨姐的模板,自己稍微把模板没有的模块给补全了. 今天便开始自己的SSM框架搭建,数据库链接是采用数据库连接池.先上个项 ...
- 传智博客(JavaWeb方面的所有知识)听课记录(经典)
一. JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...
- jdbcTemplate学习(四)
前面三节讲了jdbcTemplate的使用,这一节讲解NamedParameterJdbcTemplate的使用方法: NamedParameterJdbcTemplate类是基于JdbcTempla ...
- SpringBoot初学(4)– JdbcTemplate和Mybatis
前言 github: https://github.com/vergilyn/SpringBootDemo 代码位置: 一.Spring Boot集成JdbcTemplate或NamedParamet ...
- (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
- springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询
springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询, SpringJdbc命名参数like模糊查询,namedParameterJ ...
随机推荐
- CentOS安装crontab及使用方法(汇总多人博客并实践确认无误)
安装centOS: yum -y install vixie-cron --该软件包是cron的主程序 yum -y install crontabs--该软件包用来安装.卸载或者列举需要cron来守 ...
- CentOS6.6 kickstart文件
# Kickstart file automatically generated by anaconda. #version=DEVELinstall#cdromurl --url http://19 ...
- AAS代码运行-第11章-2
hdfs dfs -ls /user/littlesuccess/AdvancedAnalysisWithSparkhdfs dfs -mkdir /user/littlesuccess/Advanc ...
- No module named * 但是已经安装了找不到解决办法
错误现象,把\Lib\site-packages下的安装包挪动位置到新的位置后(多个Python.exe运行位置)引起这类错误 No module named * 但是已经安装了 解决过程,先试图卸载 ...
- 使用BCrypt算法加密存储登录密码用法及好处
//导入import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** *使用BCrypt算法加密存储登录密码 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- c/c++面试题(8)memcopy/memmove/atoi/itoa
1.memcpy函数的原型: void* memcpy(void* dest,cosnt void* src,size_t n); 返回值:返回dest; 功能:从源内存地址src拷贝n个字节到des ...
- 有关javascript的性能优化(合理的管理内存)
使用具备垃圾收集机制的语言编写程序,开发人员一般不必操心内存管理的问题.但是,Javascript在进行内存管理及收集时面临的问题是有点与众不同.其中最主要的一个问题是分配给Web浏览器的可用内存数量 ...
- [Python]命令行进度条
关键点是输出'\r'这个字符可以使光标回到一行的开头,这时输出其它内容就会将原内容覆盖. import time import sys def progress_test(): bar_length= ...
- sudo: /etc/sudoers is world writable
错误信息: sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, quitting 解决办法: 修复磁盘 ...