文档章节

Spring的NamedParameterJdbcTemplate的简单使用

乐在克里特
 乐在克里特
发布于 2017/02/23 13:47
字数 461
阅读 211
收藏 0

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")
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

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 268
码字总数 394729
作品 0
杭州
程序员
spring jdbctemplate 项目使用完整记录

一、前言 项目使用jdbctemplate已经一段时间了,对于jdbcTemplate的使用有了一些小小心得,这里总结后跟大家分享下。 二、spring xml 配置jdbcTemplate 三、通过DBColumnMapper、泛型封装添加...

漂泊者及其影子
2015/05/27
0
0
spring jdbc是如何实现驼峰和下划线的自动映射的

今天在看写代码的时候突然发现,在类和数据库字段之间没有做过任何的映射关系,但是数据会自动的映射好 以下是spring代码的具体实现直接贴代码 讲述映射实现的过程 关注下BeanPropertyRowMa...

时光流转
07/10
0
0
对JDBC的支持 之 7.2 JDBC模板类

JDBC模板类 概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式。 JdbcTemplate类通过模...

heroShane
2014/02/27
0
0
Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数

在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选...

HappyBKs
2015/08/27
0
0
对JDBC的支持 之 7.1 概述

概述 JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection co...

heroShane
2014/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
28分钟前
1
0
invalid character found in the request target 异常

这个异常时因为Tomcat 9不支持请求格式出现“{”等非法字符的问题 因为tomcat版本问题遇到的坑,记录一下。 问题 今天由于要测试一下订单详情页的异步查询,在本地起了一个服务,发送的请求是...

edwardGe
33分钟前
3
0
发现抓包软件fiddler的bug

1个请求他跳转之后,直接400,被拦在了Apache,使用fiddler 的,replay requests 是同样的结果,但是replay composer确是正常的。 也就是说这replay requests 是发原来的包,replay composer...

NLGBZJ
43分钟前
1
0
linux screen 命令详解

shell关闭后, 主机仍然运行 screen命令 启动jenkins以后, screen, 然后按ctrl+a 再按d 这样暂停了子界面, 这时候回到了父界面 用screen –ls查看目前子界面的状态 [root@free /]# screen -l...

SuShine
44分钟前
2
0
mac机器切换无线网络导致网页不能打开的问题

问题: 公司和家里使用不同的WI-FI,每次从家到公司时自动切换网络后,公司的许多地址不能访问, ping域名是可以ping同的,但是网页却打不开... 问题分析: 初步猜想是DNS缓存的问题? 对于MAC系统没...

Lennie002
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部