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框架基础知识的代码示例。以下是一些相关的知识点和详细说明: 1. **依赖注入(Dependency Injection)**:Spring的...
Spring框架中的JdbcTemplate是数据库操作的核心组件之一,它提供了一种简单、安全的方式来执行SQL查询和更新,而无需手动管理数据库连接。本指南将深入探讨JdbcTemplate的用法,帮助开发者更好地理解和应用这个强大...
1. Spring JDBC:理解JdbcTemplate和NamedParameterJdbcTemplate的使用,简化数据库操作。 2. 事务管理:讲解Spring的事务传播行为,配置事务管理器,以及基于注解的事务控制。 六、Spring整合其他技术 1. Spring与...
在数据访问层,Spring 提供了多种方式来操作数据库,其中 `JdbcTemplate` 是一个简单且强大的工具,它封装了 JDBC API,使得数据库操作变得更加简洁和安全。`JdbcTemplate` 减少了手写 SQL 和处理结果集的繁琐工作,...
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的JdbcTemplate或NamedParameterJdbcTemplate可以自动处理参数绑定,避免直接拼接SQL字符串,从而减少SQL注入的风险。此外,我们还可以使用Spring Security来保护后端接口,限制未经授权的访问。 在实际开发...
在`HelloWorld`项目中,你会看到如何配置Spring IoC(Inversion of Control,控制反转)容器,以及如何使用注解(@Component)来定义一个简单的Bean。同时,还会讲解如何通过@Autowired自动装配Bean依赖,以及如何使用...
例如,我们可以使用JdbcTemplate或者NamedParameterJdbcTemplate来执行SQL查询,或者通过集成Hibernate、MyBatis等ORM框架,将对象模型与数据库表关联起来。 标签“Spring”暗示了这是一个关于Spring框架的全面学习...
在IT行业中,Spring框架是Java开发领域中广泛使用的开源框架,尤其在企业级应用中扮演着核心角色。本文将深入探讨如何使用Spring进行数据访问,包括其数据访问组件的使用、配置以及最佳实践。 首先,Spring框架提供...
通过使用Spring的JdbcTemplate或NamedParameterJdbcTemplate,我们可以避免手动处理连接、结果集等,从而减少潜在的资源泄露问题。 1. **配置数据源**:整合Spring和JDBC的第一步是配置数据源。Spring支持多种类型...
在JDBC方面,Spring通过JdbcTemplate和NamedParameterJdbcTemplate简化了SQL的执行,提供了事务管理、连接池管理等功能,避免了手动处理数据库连接和关闭资源的繁琐工作。配置通常涉及以下步骤: 1. 配置数据源:在...
5. **JDBC模板优化**:Spring的JdbcTemplate和NamedParameterJdbcTemplate进一步提升了数据库操作的便捷性,降低了SQL注入的风险。 6. **Spring Boot集成**:虽然Spring Boot不是Spring 4.x的一部分,但这个版本的...
在探讨“Spring中使用JDBC”的主题时,我们首先需要理解Spring框架与JDBC的关系以及为何选择在Spring环境中使用JDBC。Spring是一个开源框架,它为Java应用提供了一个全面的编程和配置模型,旨在简化企业级应用的开发...
2. JdbcTemplate与NamedParameterJdbcTemplate:学习使用Spring提供的模板类进行数据库操作。 3. Hibernate与MyBatis集成:理解ORM框架的工作原理,配置并使用Spring整合Hibernate或MyBatis。 第五天:Spring Boot...
4. **Spring JDBC与事务管理**:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,简化了数据库操作。同时,Spring的声明式事务管理使得事务边界清晰,易于维护。源代码可能会有相应的事务配置和事务回滚处理...
你将学习如何使用JdbcTemplate和NamedParameterJdbcTemplate进行数据库操作,理解Spring如何帮助我们处理事务,以及如何在异常情况下回滚事务。 **CH6_Hibernate与Spring** 最后,这部分将展示如何整合Spring与...
Spring Boot简化了Spring应用的初始化和配置,通过“起步依赖”(Starter POMs)可以快速创建项目结构,而其内嵌的Tomcat服务器则让部署变得更加简单。 标签“SSM”指的是Spring、Struts和MyBatis的组合,这是经典...
7. **注解驱动的开发**:Spring 4.3.10版本进一步强化了注解的使用,例如@Service、@Repository、@Controller等,这些注解可以帮助开发者声明类的角色,减少XML配置。 8. **Spring Expression Language (SpEL)**:...
这个"spring简单例子示例"可能会包含创建一个简单的Spring应用,如定义一个Bean,配置IoC,编写一个Controller处理HTTP请求,以及可能涉及的数据库操作。通过学习这个示例,你可以对Spring框架有一个基本的理解,并...
第三种方式:使用`NamedParameterJdbcTemplate`。这是Spring为处理带有命名参数的SQL语句提供的一个更高级的模板类。它允许我们使用有意义的参数名而不是占位符(如:`:name`而非`?`),提高了代码的可读性和可维护...