1. Spring中的JdbcTemplate
1.1 JdbcTemplate概述
它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类,入下图所示:
我们今天的主角在spring-jdbc-4.24.RELEASE.jar中,我们在导包的时候,除了要导入这个jar包外,还需要导入一个spring-tx-4.2.4.RELEASE.jar(它是和事务相关的)。
1.2 JdbcTemplate对象的创建
我们可以参考它的源码,来一探究竟:
1 | public JdbcTemplate() { |
除了默认构造函数之外,都需要提供一个数据源。既然有set方法,依据我们之前学过的依赖注入,我们可不可以在配置文件中配置呢?
答案是肯定的。
1.3 Spring中配置数据源
1.3.1 环境搭建
1.3.2 编写Spring的配置文件
1 |
|
1.3.3 配置数据源
我们之前已经接触过了两个数据源,一个是C3P0,一个是DBCP。要想使用这两数据源都需要导入对应的jar包。
1.3.3.1 配置C3P0数据源
导包:
在Spring的配置文件中配置:
1 | <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> |
1.3.3.2 配置DBCP数据源
导包:
在Spring的配置文件中配置:
1 | <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> |
1.3.3.3 配置spring内置数据源
spring框架也提供了一个内置数据源,我们也可以使用spring的内置数据源,它就在spring-jdbc-4.2.4.REEASE.jar
包中:
1 | <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> |
1.3.4 将数据库连接的信息配置到属性文件中:
定义属性文件
1 | com.mysql.jdbc.Driver = |
引入外部的属性文件
1 | 一种方式: |
1.4 JdbcTemplate的增删改查操作
1.4.1 前期准备
1 | 创建数据库: |
1.4.2 在spring配置文件中配置JdbcTemplate
1 |
|
1.4.3 最基本使用
1 | public class JdbcTemplateDemo2 { |
1.4.4 保存操作
1 | public class JdbcTemplateDemo3 { |
1.4.5 更新操作
1 | public class JdbcTemplateDemo3 { |
1.4.6 删除操作
1 | public class JdbcTemplateDemo3 { |
1.4.7 查询所有操作
1 | public class JdbcTemplateDemo3 { |
1 | public class JdbcTemplateDemo3 { |
1.4.8 查询一个操作
1 | //使用RowMapper的方式:常用的方式 |
1.4.9 查询返回一行一列操作
1 | public class JdbcTemplateDemo3 { |
1.5 在dao中使用JdbcTemplate
1.5.1 准备实体类
1 | /** |
1.5.2 第一种方式:在dao中定义JdbcTemplate
1 | /** |
配置文件:
1 |
|
1.5.3 第二种方式:让dao继承JdbcDaoSupport
JdbcDaoSupport是spring框架为我们提供的一个类,该类中定义了一个JdbcTemplate对象,我们可以直接获取使用,但是要想创建该对象,需要为其提供一个数据源:具体源码如下:
1 | public abstract class JdbcDaoSupport extends DaoSupport { |
1 | /** |
配置文件:
1 |
|
1.5.4 两种方式有什么区别呢?
第一种在Dao类中定义JdbcTemplate的方式,适用于所有配置方式(xml和注解都可以)。
第二种让Dao继承JdbcDaoSupport的方式,只能用于基于XML的方式,注解用不了。
2. Spring中的事务控制
2.1 Spring中事务控制的API介绍
2.1.1 PlatformTransactionManager
此接口是spring的事务管理器,它里面提供了我们常用的操作事务的方法,如下图:
我们在开发中都是使用它的实现类,如下图:
1 | 真正管理事务的对象 |
2.1.2 TransactionDefinition
它是事务的定义信息对象,里面有如下方法:
2.1.2.1 事务的隔离级别
2.1.2.2 事务的传播行为
1 | REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值) |
2.1.2.3 超时时间
默认值是-1,没有超时限制。如果有,以秒为单位进行设置。
2.1.2.4 是否是只读事务
建议查询时设置为只读
2.1.3 TransactionStatus
此接口提供的是事务具体的运行状态,方法介绍如下图:
2.2 基于XML的声明式事务控制(配置方式)
2.2.1 环境搭建
2.2.1.1 拷贝必要的jar
2.2.1.2 创建spring的配置文件并导入约束
1 |
|
2.2.1.3 准备实体类
1 | /** |
2.2.1.4 编写业务层接口和实现类
1 | /** |
1 | /** |
2.2.1.5 编写Dao接口和实现类
1 | /** |
1 | /** |
2.2.1.6 在配置文件中配置业务层和持久层
1 | <!-- 配置service --> |
2.2.2 配置步骤
2.2.2.1 配置事务管理器
1 | <!-- 配置一个事务管理器 --> |
2.2.2.2 配置事务的通知引用事务管理器
1 | <!-- 事务的配置 --> |
2.2.2.3 配置事务的属性
1 | <!--在tx:advice标签内部 配置事务的属性 --> |
2.2.2.4 配置AOP-切入点表达式
1 | <!-- 配置aop --> |
2.2.2.5 配置切入点表达式和事务通知的对应关系
1 | <!-- 在aop:config标签内部:建立事务的通知和切入点表达式的关系 --> |
2.2.2.6 完整配置
1 |
|
2.3 基于XML和注解组合使用的整合方式
2.3.1 环境搭建
2.3.1.1 拷贝必备的jar
2.3.1.2 spring的配置文件导入约束并配置扫描的包
1 |
|
2.3.1.3 准备实体类
1 | /** |
2.3.1.4 业务层实现类使用注解让spring管理
1 | /** |
2.3.1.5 Dao实现类使用注解让spring管理
1 | "accountDao") ( |
2.3.2 配置步骤
2.3.2.1 配置数据源和JdbcTemplate
1 | <!-- 配置jdbcTemplate --> |
2.3.2.2 配置事务管理器并注入数据源
1 | <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> |
2.3.2.3 在业务层使用@Transactional注解
1 | <!-- 在需要事务的地方使用@Transactional注解 |
1 | "accountService") ( |
2.3.2.4 在配置文件中开启spring对注解事务的支持
1 | <!-- 开启spring对注解事务的支持 --> |
2.4 基于纯注解的声明式事务控制(配置方式)
2.4.1 环境搭建
2.4.1.1 拷贝必备的jar包
2.4.1.2 创建一个类用于加载spring的配置并指定要扫描的包
1 | /** |
2.4.1.3 准备实体类
1 | /** |
2.4.1.4 业务层实现类使用注解让spring管理
1 | /** |
2.4.1.5 Dao实现类使用注解让spring管理
1 | "accountDao") ( |
2.4.2 配置步骤
2.4.2.1 使用@Bean注解配置数据源和JdbcTemplate
1 | /** |
2.4.2.2 使用@Bean注解配置配置事务管理器
1 | /** |
2.4.2.3 在业务层使用@Transactional注解
1 | <!-- 在需要事务的地方使用@Transactional注解 |
1 | "accountService") ( |
2.4.2.4 使用@EnableTransactionManagement开启spring对注解事务的的支持
1 | /** |
-------------本文结束感谢您的阅读-------------
本文标题: Spring(四)
本文链接: https://wgy1993.gitee.io/archives/924a9eab.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
