原文地址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. 【学习笔记】C#中的泛型和泛型集合

    一.什么是泛型? 泛型是C#语言和公共语言运行库(CLR)中的一个新功能,它将类型参数的概念引入.NET Framework.类型参数使得设计某些类和方法成为可能,例如,通过使用泛型类型参数T,可以大 ...

  2. Linux纯小白操作(以安装JDK为例)

    [本文只针对纯小白,有基础的请略过] 最近公司给分配工作使用的虚拟机都是Linux系统的,以前完全没接触过,今天按照网上一些教程操作,好多地方感觉对小白不够友好(有些问题非常小白那些教程没有写出来.我 ...

  3. Tornado笔记

    helloworld Tornado特点一句话简介:Tornado是非阻塞式的Web服务器,速度非常快,每秒可以处理数以千计的链接,因此Tornado是实时Web服务的一个理想框架.Tornado因为 ...

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

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

  5. 【开发笔记】- 输出String字符串使其文本对齐

    需求 一段文本做每64个字节换行处理,并添加对应的头尾注释 代码实现 public static String certFormat(String code, String beginTitle, S ...

  6. 7.vertical-align属性

    本节学习目标: 图片.表单和旁边的文字对齐 解决图片底部默认空白缝隙问题 1.图片.表单和旁边的文字对齐 默认的图片.表单等行内元素或行内快元素是和文字的基线对齐的,但在实际情况下,我们想让他们中间对 ...

  7. bugku insertsql

    题目链接 0X00题目给出的PHP代码 error_reporting(0); function getIp(){ $ip = ''; if(isset($_SERVER['HTTP_X_FORWAR ...

  8. Spark GraphX图计算简单案例【代码实现,源码分析】

    一.简介 参考:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package big.data.analyse.graphx import o ...

  9. MySQL 加锁和死锁解析

    目录 产生死锁的必要条件 锁是加在那里的? 操作与加锁的对照关系 Insert Delete Update GAP锁 什么时候加next-key lock? Insert Intention Lock ...

  10. iview admin动态路由实现

    参考 https://blog.csdn.net/weixin_41538490/article/details/93749942