原文地址https://www.iteye.com/blog/cosmicbugs-1190279

NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。

public Object queryForObject(String sql, Map paramMap, RowMapper rowMapper)

public Object queryForObject(String sql, SqlParameterSource paramSource, RowMapper rowMapper)

SqlParameterSource的两个主要实现MapSqlParameterSource

和BeanPropertySqlParameterSource

public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)保存数据获得主键。

实例说明:

/**

* 一、NamedParameterJdbcTemplate提供了命名参数,用:x代替了?

* NamedParameterJdbcTemplate传参数可以用map或者SqlParameterSource

* 用map的好处是:x,x的值可以自由取,但是所有参数的值都必须要放到map中去,其中的key为:后面的名称,value是你传的值

* 用SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样

* 二、使用KeyHolder keyholder=new GeneratedKeyHolder();

namedjdbctemp.update(sql, ps,keyholder);这个参数可以获得主键生成值

*/

public class StuDaoImple implements StuDaointer{

private NamedParameterJdbcTemplate namedjdbctemp;

public StuDaoImple(){

namedjdbctemp=new NamedParameterJdbcTemplate(SQLConnUtil.getDataSource());

}// SQLConnUtil为JDBC工具类,提供了得到数据源的静态方法

/*

* 这里会用到NamedParameterJdbcTemplate两个好处:

* 1,不用一个个的为参数赋值。

* 2,可以轻易的得到主键自动增长值

*/

public void addStu(Stu stu) {

String sql="insert into stu values(:sname,:ssex,:sbrith)";

//:后面的名称必须和stu属性名称一样

SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

KeyHolder keyholder=new GeneratedKeyHolder();

namedjdbctemp.update(sql, ps,keyholder);

//加上KeyHolder这个参数可以得到添加后主键的值

int m=keyholder.getKey().intValue();

System.out.println(m);

//Map map=keyholder.getKeys();//这样可以得到联合主键的值

//keyholder.getKeyList();//这样可以得到一些主主键值,若一次添加好几条记录

}

public int count() {

String sql="select count(*) from stu";

//可以通过NamedParameterJdbcTemplate得到JdbcTemplate

int m=namedjdbctemp.getJdbcOperations().queryForInt(sql);

return m;

}

/*

* 这里会用到NamedParameterJdbcTemplate另一个好处:

* 位置参数

*/

public void delStu(int sid) {

String sql="delete stu where s_id=:id";

Map map=new HashMap();

map.put("id", sid);

namedjdbctemp.update(sql, map);

}

public List getAllStu() {

String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";

List list=namedjdbctemp.getJdbcOperations().query(sql,new BeanPropertyRowMapper(Stu.class));

return list;

}

public List getAllStu(Stu stu) {

String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";

SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

return namedjdbctemp.query(sql, ps, new BeanPropertyRowMapper(Stu.class));

}

public Stu getOneStu(Stu stu) {

String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";

SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

return (Stu)namedjdbctemp.queryForObject(sql, ps, new BeanPropertyRowMapper(Stu.class));

}

public String getStuName(Stu stu) {

String sql="select s_name as sname from stu where s_name=:sname";

SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

return (String)namedjdbctemp.queryForObject(sql, ps, String.class);

}

public void updStu(Stu stu) {

String sql="update stu set s_name=:sname,s_sex=:ssex,s_brith=:sbrith where s_id=:sid";

SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);

namedjdbctemp.update(sql, ps);

}

}

转自http://apps.hi.baidu.com/share/detail/33704305

NamedParameterJdbcTemplate举例使用的更多相关文章

  1. Ajax 概念 分析 举例

    Ajax是结合了访问数据库,数据访问,Jquery 可以做页面局部刷新或者说是页面不刷新,我可以让页面不刷新,仅仅是数据的刷新,没有频繁的刷页面,是现在比较常用的一种方式做页面那么它是怎么实现页面无刷 ...

  2. ValueInjecter----最好用的OOM(以微信消息转对象举例)

    使用数据实体的好处我这里就不多说了,但大家享受这些好处的时候,难免也对那些琐碎的赋值代码感到厌烦,基于此,我认为掌握一个oom的使用,还是很有必要的. 这种类型的工具有很多,比如automapper, ...

  3. Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上)

    <Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上)> <Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(下)> 目的:指导项 ...

  4. Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(下)

    <Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上)> <Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(下)> 目的:指导项 ...

  5. shell-script的简单举例

    #!/bin/bash #defind the path PATH=/usr/local export PATH read -p "please input your first name: ...

  6. 各大浏览器内核特性及对应的Browserhacks举例

    1.浏览器内核指的是什么? 简化的浏览器=用户界面+渲染引擎+js解析引擎+数据存储+网络部件 而通常所说的浏览器内核指的是页面渲染引擎(rendering engine). 2.渲染引擎 The r ...

  7. js调用php和php调用js的方法举例

    js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...

  8. c++局部变量经典举例

    局部变量: 在函数内部声明的变量为局部变量,局部变量的意思即该变量只存活在该函数中,假如该函数调用结束,那么该变量的寿命也结束了. 举例: #include<iostream> using ...

  9. HTTPS Web配置举例

    http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Representat ...

随机推荐

  1. Asp.Net页面刷新防止跳转到其他浏览器或新的选项卡

    前端页面js代码: <head> <script> window.name = "PremaritalCheckup_ManSocietyAgreeForm" ...

  2. MySql 获取数据库的所有表名

    目录 写在前面 根据数据库获取该数据库下所有的表名 根据表名获取列名与列值 写在前面 在实现某个功能的时候,需要使用MySql数据库获取某数据的所有的表名以及该表名的所有列名与列值. 根据数据库获取该 ...

  3. 用友 U9 常用的东西

    系统资源 数据字典 UI组件 UI参照组件 BE组件 BP组件 SV组件

  4. sql查询当前数据库的所有表名

    SELECT sys.tables.name as TableName from sys.tables

  5. 前端跨域之Jsonp实现原理及.Net下Jsonp的实现

    jsonp的本质是通过script标签的src属性请求到服务端,拿到到服务端返回的数据 ,因为src是可以跨域的.前端通过src发送跨域请求时在请求的url带上回调函数,服务端收到请求时,接受前端传过 ...

  6. Java高级工程师面试宝典

    Java高级工程师面试宝典 JavaSE 多线程 进程与线程的区别? 答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径. 为什么要用多线程? 答:提高程序效率 多线程创 ...

  7. 2019-09-11 redis命令【转载】

    redis中添加key value元素:set key value;       获取元素:get key ;   redis中添加集合:lpush key value1 value2 value3. ...

  8. QT场景视图父子关系图元打印研究

    在之前的一篇文章中,实现了QT场景视图的打印功能,主要通过render函数来实现,非常简单和方便. 在实际的项目需求中,除了打印整个场景外,还需要对单个图形进行打印操作,基于item的图形可以在pai ...

  9. cache verilog实现

    cache原理: https://www.cnblogs.com/mikewolf2002/p/10984976.html cache的verilog实现 实现的cache是16k, 4way组相连c ...

  10. shell脚本遇到问题"$'\r': command not found"

    shell脚本写得一切正常,但是一执行就报错: line: XXX "$'\r': command not found" 问题原因:文件格式问题(虽然在window和linux上选 ...