原文地址:https://www.iteye.com/blog/itommy-2354746

Spring JDBC包提供了JdbcTemplate和它的两个兄弟SimpleJdbcTemplate和NamedParameterJdbcTemplate。

NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。

NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

命名参数设值有两种方式:java.util.Map和SqlParameterSource:

1)Map:使用Map键数据来对于命名参数,而Map值数据用于设值;

2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

其中有两个比较实用的两个类,分别是BeanPropertySqlParameterSource、BeanPropertyRowMapper。

BeanPropertySqlParameterSource:可以把实例转化成SqlParameterSource

例,new BeanPropertySqlParameterSource(new User);

BeanPropertyRowMapper:可以把返回的每一行转化成对应的对象

例,new BeanPropertyRowMapper<>(CustomSearchVo.class);

项目中的示例:

@Service("repeatContactsService")
@Transactional
public class RepeatContactsService { private static final Logger LOG = LoggerFactory.getLogger(RepeatContactsService.class); @Resource
private NamedParameterJdbcTemplate namedParameterJdbcTemplate; public int getRepeatContactsCountByPhone(String userid, String phone){
String sql= "SELECT count(1) FROM tab_user WHERE userid != :userid AND number = :phone";
Map parmas = ImmutableMap.of("userid",userid,"phone",phone);
Integer count = null;
try {
count = namedParameterJdbcTemplate.queryForObject(sql, parmas, Integer.class);
} catch (DataAccessException e) {
LOG.error("获取值时抛错:", e);
}
return count;
} public List<RepeatContactsDetailVo> getAllRepeatContacts(String userid) {
DateTime before = DateTime.now();
Set<String> phoneSet = new HashSet<>(); String sql = "SELECT contacts_phone FROM tab_contacts WHERE userid=:userid";
Map param = ImmutableMap.of("userid", userid);
List<String> phoneList = null;
try {
phoneList = namedParameterJdbcTemplate.queryForList(sql , param, String.class);
} catch (DataAccessException e) {
LOG.error("获取用户的通讯录和运营商时抛错:", e);
} //生成需要返回的结果
Map params = ImmutableMap.of("phones", phoneSet, "userid", userid);
String sql = "SELECT a.name,a.phone,MAX(a.type),b.name userName,b.phone userPhone,b.idcard userIdcard FROM tab_contacts a where call_number in (:phones) AND userid != :userid GROUP BY a.userid,a.phone";
List<RepeatContactsDetailVo> contactsList = new ArrayList<>();
try {
contactsList = namedParameterJdbcTemplate.
query(sql, params, new BeanPropertyRowMapper<>(RepeatContactsDetailVo.class));
} catch (DataAccessException e) {
LOG.error("获取时抛错:", e);
}
return contactsList ;
}
}

推荐看讲NamedParameterJdbcTemplate:

http://www.voidcn.com/blog/victor_cindy1/article/p-6153531.html

讲解JdbcTemplate接口比较好的

https://my.oschina.net/u/218421/blog/38598

Spring的NamedParameterJdbcTemplate的简单使用的更多相关文章

  1. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  2. Spring security oauth2最简单入门环境搭建

    关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+s ...

  3. Spring+Netty4实现的简单通信框架

    参考:http://cpjsjxy.iteye.com/blog/1587601 Spring+Netty4实现的简单通信框架,支持Socket.HTTP.WebSocket_Text.WebSock ...

  4. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

  5. Spring data jpa 实现简单动态查询的通用Specification方法

    本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...

  6. SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法

    软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...

  7. Spring 的 NamedParameterJdbcTemplate(转)

    NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性. NamedParameterJdbcTemplate主要提供以下三类方法 ...

  8. Spring JDBC NamedParameterJdbcTemplate类示例

    org.springframework.jdbc.core.NamedParameterJdbcTemplate类是一个具有基本JDBC操作的模板类,允许使用命名参数而不是传统的’?‘占位符. 这个类 ...

  9. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

随机推荐

  1. windows 2012 IIS 部署 .net core HTTP Error 502.5 - Process Failure 错误解决办法

    安装系统补丁: 2012 R2对应>Windows8.1-KB2999226-x64.msu 下载地址: https://www.microsoft.com/zh-CN/download/det ...

  2. JavaScript学习思维导图

    JS基本概念 JS操作符 JS基本语法 JS数组 JS Date用法 JS 字符串用法 JS编程风格 JS实践

  3. python 动态创建变量 获取变量名

    参考链接:https://www.cnblogs.com/technologylife/p/9211324.html 参考链接(未)(使用inspect 获取变量名):https://blog.csd ...

  4. 秋招打怪升级之路:十面阿里,终获offer!

    本文转载自:https://gongfukangee.github.io/2019/09/06/Job/ 作者:G.Fukang 开源项目推荐: JavaGuide: Java学习+面试指南!Gith ...

  5. Qt隐式共享机制

    1.浅拷贝 浅拷贝-引用类型.浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同),对其中任何一个对象的改动都会影响另外一个对象. 2.深拷贝 而深拷贝-值类型.深拷贝是指源对象与 ...

  6. WampServer出现You don’t have permission to access/on this server提示

    WampServer出现You don’t have permission to access/on this server提示 本地搭建WampServer,输入http://127.0.0.1访问 ...

  7. 01java中常用的一些算法工具——map转xml和xml转map

    借鉴博客:https://blog.csdn.net/Goodbye_Youth/article/details/80937862 他这篇写的不错,多层嵌套的map也能转成xml 这篇也不错:http ...

  8. List转换数组 数组转换List

    数组转List package listtoArray; import java.util.ArrayList;import java.util.Arrays;import java.util.Col ...

  9. 生成Uuid工具类

    package com.freeter.util; import java.util.UUID; /** * @author liuqi * **/public class Uuid{ public ...

  10. js日期增加或减少一天

    想自己写一个日期的加减方法,但是涉及到每个月天数的判断,如果是2月份的话,还要涉及到闰年的判断,有些复杂,其实只要调用Date对象的setDate()函数就可以了,具体方法如下: function a ...