NamedParameterJdbcTemplate
来源:互联网 发布:淘宝旧版本5.0下载 编辑:程序博客网 时间:2024/06/06 14:04
NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。NamedParameterJdbcTemplate提供了命名参数,用:x代替了?
SqlParameterSource的两个主要实现MapSqlParameterSource和BeanPropertyParameterSource
Map参数源:采用键值对方式传参(参数alias.html' target='_blank'>别名可任意,如:m,:n)
static UserfindUser(Useruser){
NamedParameterJdbcTemplate named=new NamedParameterJdbcTemplate(dataSource);
String sql="select id,name,money,birthday from user where money>:m and id<:n";
Map map=new HashMap();
map.put("m",user.getMoney());
map.put("n",user.getId());
Object u=named.queryForObject(sql,map,new BeanPropertyRowMapper(User.class));//这个方法当查询对象多于一个或为null时会抛异常
return(User)u;
}
Bean属性参数源使用方法(参数别名要与bean类的属性对应,如:money,:id)(通过&号也可以命名别名,不建议使用)
staticUserfindUser(Useruser){
NamedParameterJdbcTemplate named=new NamedParameterJdbcTemplate(dataSource);
String sql="selectid,name,money,birthday from user where money>:money and id<:id";
SqlParameterSource ps=new BeanPropertySqlParameterSource(user);
Object u=named.queryForObject(sql,ps,new BeanPropertyRowMapper(User.class));//这个方法当查询对象多于一个或为null时会抛异常
return(User)u;
} //保存数据获得主键
//保存数据获得主键
* public int update(String sql,SqlParameterSource paramSource,KeyHolder generatedKeyHolder)
static void addUser(Useruser)
{
NameParameterJdbcTemplate named=new NameParameterJdbcTemplate(dataSource);
String sql="insert into user(name,birthday,money)values(:name,:birthday,:money");
SqlParameterSource ps=new BeanPropertySqlParameterSource(user);
KeyHolder keyHolder=new GeneratedKeyHolder();
named.update(sql,ps,keyHolder);
int id=keyHolder.getKey().intValue();
user.setId(id);//如果不是整型的主键呢,使用Map map=keyHolder.getKeys();
}
二、配置
UserDaoImpl :
public class UserDaoImpl implements UserDao { private NamedParameterJdbcTemplate namedParameterJdbcTemplate; public void setDataSource(DataSource dataSource) { this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); } //其它方法暂时忽略……}
spring配置:
<bean id="userDao" class="com.hxzy.account.namedParameterJdbcTemplate.UserDaoImpl"> <property name="dataSource" ref="dataSource"/></bean>
三、使用
NamedParameterJdbcTemplate传参数可以用map或者SqlParameterSource
用map的好处是:x,x的值可以自由取,但是所有参数的值都必须要放到map中去,其中的key为:后面的名称,value是你传的值。
用SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样
@Override
public void save(User user) { String sql="insert into tb_test1 values(:username,:password,:sex)"; //:后面的名称必须和stu属性名称一样
SqlParameterSource ps=new BeanPropertySqlParameterSource(user); KeyHolder keyholder=new GeneratedKeyHolder(); namedParameterJdbcTemplate.update(sql, ps,keyholder); //加上KeyHolder这个参数可以得到添加后主键的值 int m=keyholder.getKey().intValue(); system.out.println(m); //Map map=keyholder.getKeys();//这样可以得到联合主键的值 //keyholder.getKeyList();//这样可以得到一些主主键值,若一次添加好几条记录 }@Override
public void update(User user) { String sql="update tb_test1 set username=:username,sex=:sex,password=:password where id=:id"; SqlParameterSource ps=new BeanPropertySqlParameterSource(user); namedParameterJdbcTemplate.update(sql, ps); } @Override
public void delete(User user) {String sql="delete tb_test1 where id=:id"; Map map=new HashMap(); map.put("id", user.getId()); namedParameterJdbcTemplate.update(sql, map);
}
//BeanPropertyRowMapper就是将查询结果和User进行映射的类,将查询出的每条记录都映射为User实例//namedParameterJdbcTemplate调用封装的jdbcTemplate进行操作
public List queryAllUser() {
String sql="select id,username,password,sex from tb_test1"; List list=namedParameterJdbcTemplate.getJdbcOperations().query(sql,new BeanPropertyRowMapper(User.class)); return list; } public List getAllUsers(User user) { String sql="select id,username,password,sex from tb_test1 where username=:username"; SqlParameterSource ps=new BeanPropertySqlParameterSource(user); //将user实例和sql中的:xx进行对应
return namedParameterJdbcTemplate.query(sql, ps, new BeanPropertyRowMapper(User.class)); } public Stu getOneUser(User user) { String sql="select id,username,password,sex from tb_test1 where id=:id"; SqlParameterSource ps=new BeanPropertySqlParameterSource(user); return (User)namedParameterJdbcTemplate.queryForObject(sql, ps, new BeanPropertyRowMapper(User.class)); } public String getUserName(User user) { String sql="select username from tb_test1 where username=:username"; SqlParameterSource ps=new BeanPropertySqlParameterSource(user);return (String)namedParameterJdbcTemplate.queryForObject(sql, ps, String.class); }
- NamedParameterJdbcTemplate
- NamedParameterJdbcTemplate
- NamedParameterJdbcTemplate
- SpringJDBC--NamedParameterJdbcTemplate
- Spring NamedParameterJdbcTemplate
- Spring NamedParameterJdbcTemplate 详解
- NamedParameterJdbcTemplate 传LIST
- 17.Spring_使用NamedParameterJdbcTemplate
- NamedParameterJdbcTemplate的用法
- Spring NamedParameterJdbcTemplate 详解
- NamedParameterJdbcTemplate的ORM
- NamedParameterJdbcTemplate的使用
- Spring JDBC之NamedParameterJdbcTemplate
- 11.3 NamedParameterJDBCTemplate、SimpleJDBCTemplate
- Spring中NamedParameterJdbcTemplate详解
- NamedParameterJdbcTemplate常用方法总结
- 使用 namedParameterJdbcTemplate 模糊查询
- 详解jdbcTemplate和namedParameterJdbcTemplate
- markdown语法
- 20170503 Push数据包/提需求的方法/开发职责/工作禁句
- Dijkstra算法(单源最短路径)
- 图像文件批量读取
- 判断网络是否连接
- NamedParameterJdbcTemplate
- 处于同一域中的两台SQL Server 实例无法连接
- svn请求的名称有效,但是找不到请求的类型的数据
- T001-你好,小程序-《微信小程序项目实战教程》
- final关键字、封装
- java Web项目实践之7 添加功能、精确查询功能的设计及实现
- 什么是音源?
- 纯小白系列(三):对伪装“移动”积分客户端的逆向分析
- healthkit 之前的计步方案