前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习-JdbcTemplate

快速学习-JdbcTemplate

作者头像
cwl_java
发布2020-02-18 16:10:19
6040
发布2020-02-18 16:10:19
举报
文章被收录于专栏:cwl_Javacwl_Java

第7章 JdbcTemplate

7.1 概述

为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架。 作为Spring JDBC框架的核心,JDBC模板的设计目的是为不同类型的JDBC操作提供模板方法,通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低。 可以将Spring的JdbcTemplate看作是一个小型的轻量级持久化层框架,和我们之前使用过的DBUtils风格非常接近。

7.2 环境准备

7.2.1导入JAR包

  1. IOC容器所需要的JAR包 commons-logging-1.1.1.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar
  2. JdbcTemplate所需要的JAR包 spring-jdbc-4.0.0.RELEASE.jar spring-orm-4.0.0.RELEASE.jar spring-tx-4.0.0.RELEASE.jar
  3. 数据库驱动和数据源 c3p0-0.9.1.2.jar mysql-connector-java-5.1.7-bin.jar

7.2.2 创建连接数据库基本信息属性文件

代码语言:javascript
复制
user=root
password=root
jdbcUrl=jdbc:mysql:///query_data
driverClass=com.mysql.jdbc.Driver

initialPoolSize=30
minPoolSize=10
maxPoolSize=100
acquireIncrement=5
maxStatements=1000
maxStatementsPerConnection=10

7.2.3 在Spring配置文件中配置相关的bean

  1. 数据源对象
代码语言:javascript
复制
<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="user" value="${user}"/>
	<property name="password" value="${password}"/>
	<property name="jdbcUrl" value="${jdbcUrl}"/>
	<property name="driverClass" value="${driverClass}"/>
	<property name="initialPoolSize" value="${initialPoolSize}"/>
	<property name="minPoolSize" value="${minPoolSize}"/>
	<property name="maxPoolSize" value="${maxPoolSize}"/>
	<property name="acquireIncrement" value="${acquireIncrement}"/>
	<property name="maxStatements" value="${maxStatements}"/>
<property name="maxStatementsPerConnection" 
value="${maxStatementsPerConnection}"/>
</bean>
  1. JdbcTemplate对象
代码语言:javascript
复制
<bean id="template" 
class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"/>
</bean>

7.3 持久化操作

  1. 增删改 JdbcTemplate.update(String, Object…)
  2. 批量增删改 JdbcTemplate.batchUpdate(String, List<Object[]>) Object[]封装了SQL语句每一次执行时所需要的参数 List集合封装了SQL语句多次执行时的所有参数
  3. 查询单行 JdbcTemplate.queryForObject(String, RowMapper, Object…)
在这里插入图片描述
在这里插入图片描述
  1. 查询多行 JdbcTemplate.query(String, RowMapper, Object…) RowMapper对象依然可以使用BeanPropertyRowMapper
  2. 查询单一值 JdbcTemplate.queryForObject(String, Class, Object…)

7.4 使用具名参数的JdbcTemplate

  1. 关于具名参数 在Hibernate的HQL查询中我们体验过具名参数的使用,相对于基于位置的参数,具名参数具有更好的可维护性,在SQL语句中参数较多时可以考虑使用具名参数。 在Spring中可以通过NamedParameterJdbcTemplate类的对象使用带有具名参数的SQL语句。
  2. 通过IOC容器创建NamedParameterJdbcTemplate对象
代码语言:javascript
复制
<!-- 配置可以使用具名参数的JDBCTemplate类对象 -->
<bean 
	id="namedTemplate" 
	class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
	<!-- 没有无参构造器,必须传入数据源或JdbcTemplate对象 -->
	<constructor-arg ref="dataSource"/>
</bean>
  1. 具名参数在SQL语句中的格式
代码语言:javascript
复制
INSERT INTO depts (dept_name) VALUES (:deptName)
  1. 具名参数传入 ① 通过Map对象传入 NamedParameterJdbcTemplate.update(String sql, Map<String, ?> map) Map的键是参数名,值是参数值 ② 通过SqlParameterSource对象传入
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
String sql = "INSERT INTO depts (dept_name) VALUES (:deptName)";
Department department = new Department(null, "YYY", null);
SqlParameterSource sqlParameterSource = 
		new BeanPropertySqlParameterSource(department);
namedTemplate.update(sql, sqlParameterSource);

7.5 使用JdbcTemplate实现Dao

  1. 通过IOC容器自动注入 JdbcTemplate类是线程安全的,所以可以在IOC容器中声明它的单个实例,并将这个实例注入到所有的Dao实例中。
代码语言:javascript
复制
@Repository
public class EmployeeDao {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	public Employee get(Integer id){
		//…
	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第7章 JdbcTemplate
    • 7.1 概述
      • 7.2 环境准备
        • 7.2.1导入JAR包
        • 7.2.2 创建连接数据库基本信息属性文件
        • 7.2.3 在Spring配置文件中配置相关的bean
      • 7.3 持久化操作
        • 7.4 使用具名参数的JdbcTemplate
          • 7.5 使用JdbcTemplate实现Dao
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档