`

Spring的NamedParameterJdbcTemplate的简单使用

阅读更多

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一些简单的例子

    在这个名为"spring一些简单的例子"的压缩包中,你可能会找到一系列帮助初学者理解并掌握Spring框架基础知识的代码示例。以下是一些相关的知识点和详细说明: 1. **依赖注入(Dependency Injection)**:Spring的...

    Spring:JdbcTemplate使用指南

    Spring框架中的JdbcTemplate是数据库操作的核心组件之一,它提供了一种简单、安全的方式来执行SQL查询和更新,而无需手动管理数据库连接。本指南将深入探讨JdbcTemplate的用法,帮助开发者更好地理解和应用这个强大...

    详尽的Spring2.0学习提纲

    1. Spring JDBC:理解JdbcTemplate和NamedParameterJdbcTemplate的使用,简化数据库操作。 2. 事务管理:讲解Spring的事务传播行为,配置事务管理器,以及基于注解的事务控制。 六、Spring整合其他技术 1. Spring与...

    spring内置jdbctemplate使用demo

    在数据访问层,Spring 提供了多种方式来操作数据库,其中 `JdbcTemplate` 是一个简单且强大的工具,它封装了 JDBC API,使得数据库操作变得更加简洁和安全。`JdbcTemplate` 减少了手写 SQL 和处理结果集的繁琐工作,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    使用spring框架整合DBUtils技术,实现用户转账功能

    Spring的JdbcTemplate或NamedParameterJdbcTemplate可以自动处理参数绑定,避免直接拼接SQL字符串,从而减少SQL注入的风险。此外,我们还可以使用Spring Security来保护后端接口,限制未经授权的访问。 在实际开发...

    spring入门代码项目

    在`HelloWorld`项目中,你会看到如何配置Spring IoC(Inversion of Control,控制反转)容器,以及如何使用注解(@Component)来定义一个简单的Bean。同时,还会讲解如何通过@Autowired自动装配Bean依赖,以及如何使用...

    Spring的简单应用

    例如,我们可以使用JdbcTemplate或者NamedParameterJdbcTemplate来执行SQL查询,或者通过集成Hibernate、MyBatis等ORM框架,将对象模型与数据库表关联起来。 标签“Spring”暗示了这是一个关于Spring框架的全面学习...

    使用Spring进行数据访问

    在IT行业中,Spring框架是Java开发领域中广泛使用的开源框架,尤其在企业级应用中扮演着核心角色。本文将深入探讨如何使用Spring进行数据访问,包括其数据访问组件的使用、配置以及最佳实践。 首先,Spring框架提供...

    spring03(使用spring整合jdbc)

    通过使用Spring的JdbcTemplate或NamedParameterJdbcTemplate,我们可以避免手动处理连接、结果集等,从而减少潜在的资源泄露问题。 1. **配置数据源**:整合Spring和JDBC的第一步是配置数据源。Spring支持多种类型...

    在应用中spring的使用

    在JDBC方面,Spring通过JdbcTemplate和NamedParameterJdbcTemplate简化了SQL的执行,提供了事务管理、连接池管理等功能,避免了手动处理数据库连接和关闭资源的繁琐工作。配置通常涉及以下步骤: 1. 配置数据源:在...

    SpringiA4_SourceCode:Spring实战第四版源码,学习用。

    5. **JDBC模板优化**:Spring的JdbcTemplate和NamedParameterJdbcTemplate进一步提升了数据库操作的便捷性,降低了SQL注入的风险。 6. **Spring Boot集成**:虽然Spring Boot不是Spring 4.x的一部分,但这个版本的...

    spring中使用JDBC

    在探讨“Spring中使用JDBC”的主题时,我们首先需要理解Spring框架与JDBC的关系以及为何选择在Spring环境中使用JDBC。Spring是一个开源框架,它为Java应用提供了一个全面的编程和配置模型,旨在简化企业级应用的开发...

    Spring教程

    2. JdbcTemplate与NamedParameterJdbcTemplate:学习使用Spring提供的模板类进行数据库操作。 3. Hibernate与MyBatis集成:理解ORM框架的工作原理,配置并使用Spring整合Hibernate或MyBatis。 第五天:Spring Boot...

    Spring笔记示例源代码

    4. **Spring JDBC与事务管理**:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,简化了数据库操作。同时,Spring的声明式事务管理使得事务边界清晰,易于维护。源代码可能会有相应的事务配置和事务回滚处理...

    spring技术手册demo

    你将学习如何使用JdbcTemplate和NamedParameterJdbcTemplate进行数据库操作,理解Spring如何帮助我们处理事务,以及如何在异常情况下回滚事务。 **CH6_Hibernate与Spring** 最后,这部分将展示如何整合Spring与...

    Spring5-jar包(5.1.9版本)

    Spring Boot简化了Spring应用的初始化和配置,通过“起步依赖”(Starter POMs)可以快速创建项目结构,而其内嵌的Tomcat服务器则让部署变得更加简单。 标签“SSM”指的是Spring、Struts和MyBatis的组合,这是经典...

    spring 4.3.10版本全部jar

    7. **注解驱动的开发**:Spring 4.3.10版本进一步强化了注解的使用,例如@Service、@Repository、@Controller等,这些注解可以帮助开发者声明类的角色,减少XML配置。 8. **Spring Expression Language (SpEL)**:...

    spring简单例子示例

    这个"spring简单例子示例"可能会包含创建一个简单的Spring应用,如定义一个Bean,配置IoC,编写一个Controller处理HTTP请求,以及可能涉及的数据库操作。通过学习这个示例,你可以对Spring框架有一个基本的理解,并...

    Spring使用JDBC做的增删改查

    第三种方式:使用`NamedParameterJdbcTemplate`。这是Spring为处理带有命名参数的SQL语句提供的一个更高级的模板类。它允许我们使用有意义的参数名而不是占位符(如:`:name`而非`?`),提高了代码的可读性和可维护...

Global site tag (gtag.js) - Google Analytics