Spring NamedParameterjdbc详解和如何获得主键自增值
来源:互联网 发布:自学虚幻4还是unity3d 编辑:程序博客网 时间:2024/06/06 06:55
NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。
NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。
接下来让我们分析一下代码吧:
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。
可以看出BeanPropertySqlParameterSource使用能减少很多工作量,但命名参数必须和JavaBean属性名称相对应才可以。
通过KeyHolder.getKey().intVal便可以获得自增的主键值
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属性名称相对应才可以。
上面是看转载别人的博客,下面我来补充一点,我创建的表中实现了主键自增
但是如何获得自增后的主键值呢,不能直接通过user.getId();
之前我利用JdbcTemplate获得了自增的主键值,自己摸索了一下后,发现NamedParameterJdbcTemplate采用类似的方法
下面列举下我实现的代码:
向表中插入数据的Sql语句:
private final String INSERT_SQL="insert into td(user_name,password)values(:user_name,:password)";执行sql语句和获得主键自增值:
@Overridepublic KeyHolder save(UserModel user) {KeyHolder keyHolder=new GeneratedKeyHolder();/** * SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值, * 默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现; * MapSqlParameterSource实现非常简单,只是封装了java.util.Map; * 而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。 */SqlParameterSource paramSource=new BeanPropertySqlParameterSource(user);/** * 设置如何获取自增主键值,注意下面的参数,下面的比较重要 */getNamedParameterJdbcTemplate().update(INSERT_SQL, paramSource,keyHolder,new String[]{"id"});return keyHolder;}
通过KeyHolder.getKey().intVal便可以获得自增的主键值
今天被虐惨了,唉,得静下心来追赶了!
0 0
- Spring NamedParameterjdbc详解和如何获得主键自增值
- mysql 修改主键自增值(起始值)
- Spring JDBC 如何获得和生成主键+Spring JDBC对行集的支持
- Spring中获得数据库的自增主键值
- MySQl 获得表的下一个自增值
- 关于如何获得数据库插入操作中数据的自增长主键的值
- oracle序列详解和创建自增主键
- oracle序列详解和创建自增主键
- 获得ORACLE表的自增长主键
- sql插入后获得自增主键
- SqlServer获得下一个自增长主键值
- PowerDesigner中如何生成主键和自增列
- 【PD】PowerDesigner中如何生成主键和自增列
- PowerDesigner中如何生成主键和自增列
- 自增主键和GUID主键
- 使用Spring JDBC新增记录如何返回自增主键值
- JDBC 如何获得自动生成的主键
- mybatis添加时如何获得主键值
- UML(二)——交互图
- C++Primer 学习笔记1 初窥C++
- C++中继承中遇到的构造函数问题
- openCV2 第三讲 遍历图像1
- c++设计一个不能被继承的类,为什么必须是虚继承?原因分析
- Spring NamedParameterjdbc详解和如何获得主键自增值
- SOA概述
- 虚拟机克隆后eth0网卡变成eth1网卡并且IP地址消失问题解决
- 重载和重写
- JavaWeb 通过配置切换底层存储源
- FTP服务器配置(cmd中ftp命令)
- 二哥学算法之单向链表
- 自学安卓的一些烦恼
- 2014ACM/ICPC亚洲区北京站现场赛(HDU 5111,5115,5119,5120,5122)