spring之NamedParameterJdbcTemplate返回自增列值
以前使用JdbcTemplate来获取自增列的值,现在发现NamedParameterJdbcTemplate也可以,而且后者大部分情况下,其实更加方便。
这种方便主要是在于代码维护方面:我们更加习惯于看有意的名称而不是?。
我们来看下二者的具体例子:
@Component
public class NamedJdbcServiceImpl implements NamedJdbcService { @Autowired
NamedParameterJdbcTemplate njdbcTp; @Autowired
JdbcTemplate jdbcTp; @Override
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,rollbackFor=Exception.class)
public int addFamilyWithNJT(String name) {
String sql="insert into family(name) values(:name)";
//使用map传递参数
Map<String,Object> args=new HashMap<String,Object>();
args.put("name",name);
KeyHolder keyHolder=new GeneratedKeyHolder();
SqlParameterSource paramSource=new MapSqlParameterSource(args);
int qty=njdbcTp.update(sql, paramSource, keyHolder);
return keyHolder.getKey().intValue();
} @Override
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,rollbackFor=Exception.class)
public int addFamilyWithNJT2(String name) {
String sql="insert into family(name) values(:name)";
//使用bean/pojo传递参数
Family family=new Family(name);
KeyHolder keyHolder=new GeneratedKeyHolder();
SqlParameterSource paramSource=new BeanPropertySqlParameterSource(family);
int qty=njdbcTp.update(sql, paramSource, keyHolder);
return keyHolder.getKey().intValue();
} @Override
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,rollbackFor=Exception.class)
public int addFamilyWithJT(String name) {
KeyHolder keyHolder=new GeneratedKeyHolder();
jdbcTp.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
String sql="insert into family(name) values(?)";
PreparedStatement ps = null;
ps = con.prepareStatement(sql, new String[] { "custom_id"});
ps.setInt(1, Integer.valueOf(name));
return ps;
}},keyHolder);
return keyHolder.getKey().intValue();
}
}
SqlParameterSource 接口有多个实现,具体如下图:

具体的后代有 BeanPropertySqlParameterSource和MapSqlParameterSource。
这两个实现类的作用就和它们的名字一样,分别通过bean和map的传递值,关联的方式分别是属性和key的名称必须和命名参数的名称一致即可。
相对完整的内容,请参阅 Spring-jdbcTempalate研究 - 正在战斗中 - 博客园 (cnblogs.com)
spring之NamedParameterJdbcTemplate返回自增列值的更多相关文章
- mysql 清空或删除表数据后,控制表自增列值的方法
http://blog.sina.com.cn/s/blog_68431a3b0100y04v.html 方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增 ...
- MySQL--REPLACE INTO更新自增列值引发的异常
##=====================================================================##测试环境:MySQL版本:MySQL 5.7.19复制 ...
- sql server自增列值的获取
IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY() 受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY 受会话限制 ...
- SQL Server 强行Insert包含自增列值的记录
SET IDENTITY_INSERT 表 ON INSERT INTO 表 ([ID] ,[SequenceNumber] ,[EnumCode] ,[Description]) VALUES ( ...
- 转:SqlServer2012自增列值突然增大1000的原因及解决方法
原文链接:http://blog.csdn.net/phoenix36999/article/details/53304126 首先排除数据回滚及增加删除等操作. 按照这篇文章SQL Server 2 ...
- SQLServer2012自增列值跳跃的问题
2012引入的新特性,重启之后会出现值跳跃的问题,如: 解决的方案: 1.使用序列(Sequence),2012引入的和Oracle一样的特性. 2.更改SQLServer启动服务的启动参数,增加[- ...
- excel筛选两列值是否相同,如果相同返回第三列值
见图:
- innodb 自增列重复值问题
1 innodb 自增列出现重复值的问题 先从问题入手,重现下这个bug use test; drop table t1; create table t1(id int auto_increment, ...
- MySQL自增列(AUTO_INCREMENT)相关知识点总结
MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...
- SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)
SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...
随机推荐
- WPF 制作一个占用文件的测试工具
我在开发软件进行测试时,需要测试拖入的文件被占用时软件的行为,于是就做了一个文件占用工具,此工具可以将某个文件进行占用,以及获取某个文件被哪个进程占用 先给大家看一下效果: 以上是拖入文件到灰色部分, ...
- 通过Google浏览器Cookie文件获取cookie信息,80以上版本有效
public class ReadCookie { /// <summary> /// </summary> /// <param name="hostName ...
- 实验8 #第8章 Verilog有限状态机设计-1 #Verilog #Quartus #modelsim
8-1 流水灯控制器 1. 实验要求:采用有限状态机设计彩灯控制器,控制LED灯实现预想的演示花型. 2. 实验内容: (1)功能:设计彩灯控制器,要求控制18个LED灯实现如下的演示花型: 从两边往 ...
- vue解决二级路由redirect(默认路由)不传参的问题
场景: pageA----pageB(pageB包含三个二级路由) 默认进入pageB时进入第一个页面的路由,之后点击左侧按钮,分别进入其他二级路由 原router.js写法: //应用信息 ...
- 简说Python之函数
目录 Python的函数 函数的简单调用 函数传参 返回值 计算圆形面积 变量作用域 局部变量 全局变量 就像平时玩的积木,函数就是一个个成块的积木,可以组合你想要的任何形状. Python的函数 函 ...
- 🔥🔥v1.9.2-httpsok快速申请免费谷歌SSL证书
v1.9.2-httpsok快速申请免费谷歌SSL证书 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定. ...
- 前端使用 Konva 实现可视化设计器(10)- 对齐线
请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ github源码 gitee源码 示例地址 不知不觉来到第 10 章了,感觉接近尾声了... 对齐线 ...
- SpringBoot3集成WebSocket
标签:WebSocket,Session,Postman. 一.简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工.双向的通信通道,使得客户端和服务器之间的数据交换变得更加简 ...
- 密码学—凯撒密码Python程序
文章目录 凯撒密码来源 加密算法 解密算法 凯撒密码来源 古典密码,且属于单表加密 凯撒密码又称恺撒变换.变换加密,凯撒是当时罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系.(当然 ...
- [第一届长城杯]-ez-python
----这道题似曾相识,和某刃的题目不能说不同,简直就一摸一样 ----考点:pickle序列化问题,命令执行 ----正常访问网站,源代码F12给出?pic=的提示,这种大致一看就是可以任意文件访问 ...