第1章 Spring中的 JdbcTemplate
1.1 JdbcTemplate 概述
jdbcTemplate是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装,spring框架为我们提供了很多操作模板类。
操作关系型数据库的:
JdbcTemplate,HibernateTemplate
操作nosql数据库的:
RedisTemplate
操作消息型队列的:
JmsTemplate
我们今天的主角在 spring-jdbc-5.0.2.RELEASE.jar 中,我们在导包的时候,除了要导入这个 jar 包 外,还需要导入一个 spring-tx-5.0.2.RELEASE.jar(它是和事务相关的)。
1.2 JdbcTemplate 对象的创建
我们可以参考它的源码,来一探究竟:
1.4 JdbcTemplate 的增删改查操作
1.4.1 前期准备
创建数据库:
create database eesyspring;
use eesyspring;
创建表:
create table account(
id int primary key auto_increment,
name varchar(40),
money float
)character set utf8 collate utf8_general_ci;
insert into account(name,money) values('aaa',1000);
insert into account(name,money) values('bbb',1000);
insert into account(name,money) values('ccc',1000);
1.4.2 在 spring 配置文件中配置 JdbcTemplate
1.4.3 最基本使用 (增删查改)
1.5 在 dao 中使用 JdbcTemplate
1.5.1 准备实体类
1.5.2 第一种方式:在 dao 中定义 JdbcTemplate
账户的接口
/**
* 账户的持久层实现类 * 此版本的 dao,需要给 dao注入 JdbcTemplate */
配置文件
1.5.3 第二种方式:让 dao 继承 JdbcDaoSupport
JdbcDaoSupport 是spring 框架为我们提供的一个类,该类中定义了一个 JdbcTemplate 对象,我们可以 直接获取使用,但是要想创建该对象,需要为其提供一个数据源:具体源码如下:
账户的接口
账户的持久层实现类 * 此版本 dao,只需要给它的父类注入一个数据源
配置文件:
第2章 Spring中的事务控制
2.1 Spring事务控制我们要明确的
第一:JavaEE 体系进行分层开发,事务处理位于业务层,Spring 提供了分层设计业务层的事务处理解决方 案。
第二:spring 框架为我们提供了一组事务控制的接口。具体在后面的第二小节介绍。这组接口是在 spring-tx-5.0.2.RELEASE.jar 中。
第三:spring 的事务控制都是基于 AOP 的,它既可以使用编程的方式实现,也可以使用配置的方式实现。我 们学习的重点是使用配置的方式实现。
2.2 Spring中事务控制的 API介绍
2.2.1 PlatformTransactionManager
此接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法,如下图:
我们在开发中都是使用它的实现类,如下:
真正管理事务的对象
org.springframework.jdbc.datasource.DataSourceTransactionManager 使用 Spring JDBC 或 iBatis 进行持久化数据时使用
org.springframework.orm.hibernate5.HibernateTransactionManager 使用 Hibernate 版本进行持久化数据时使用
2.2.2 TransactionDefinition
2.2.2.1 事务的隔离级别
2.2.2.2 事务的传播行为
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中,一般是默认值。
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER:以非事务方式运行,如果当前存在事务,抛出异常
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作。
2.2.2.3 超时时间
默认值是-1,没有超时限制。如果有,以秒为单位进行设置。
2.2.2.4 是否是只读事务
建议查询时设置为只读。
2.2.3 TransactionStatus
此接口提供的是事务具体的运行状态,方法介绍如下图:
2.3 基于 XML 的声明式事务控制(配置方式)重点
2.3.1 环境搭建
2.3.1.1 第一步:添加依赖
2.3.1.2 第二步:创建 spring 的配置文件并导入约束
2.3.1.3 第三步:准备数据库表和实体类
创建数据库:
create database eesyspring;
use eesyspring;
创建表:
create table account(
id int primary key auto_increment,
name varchar(40),
money float
)character set utf8 collate utf8_general_ci;
insert into account(name,money) values('aaa',1000);
insert into account(name,money) values('bbb',1000);
insert into account(name,money) values('ccc',1000);
账户的实体
2.3.1.4 第四步:编写业务层接口和实现类
账户的业务层接口
账户的业务层实现类
2.3.1.5 第五步:编写 Dao 接口和实现类
* 账户的持久层实现类 * 此版本 dao,只需要给它的父类注入一个数据源
2.3.1.6 第六步:在配置文件中配置业务层和持久层对
2.3.2 配置步骤
2.3.2.1 第一步:配置事务管理器
2.3.2.2 第二步:配置事务的通知引用事务管理器
2.3.2.3 第三步:配置事务的属性
2.3.2.4 第四步:配置 AOP 切入点表达式
2.3.2.5 第五步:配置切入点表达式和事务通知的对应关系
2.4 基于注解的配置方式
2.4.1 环境搭建
2.4.1.1 第一步:导入依赖同上
2.4.1.2 第二步:创建 spring 的配置文件导入约束并配置扫描的包
2.4.1.3 第三步:创建数据库表和实体类
和基于 xml 的配置相同。略
2.4.1.4 第四步:创建业务层接口和实现类并使用注解让 spring 管理
2.4.1.5 第五步:创建 Dao 接口和实现类并使用注解让 spring 管理
2.4.2 配置步骤
2.4.2.1 第一步:配置事务管理器并注入数据源
2.4.2.2 第二步:在业务层使用@Transactional 注解
2.4.2.3 第三步:在配置文件中开启 spring 对注解事务的支持
2.4.3 不使用 xml的配置方式
2.4.3.1编写配置类
/**
* 和连接数据库相关的配置类
*/
用于代替:
/**
* 和事务相关的配置类
*/
用于代替:
/**
* spring的配置类,相当于bean.xml
*/
测试: