spring04

第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 对象的创建

我们可以参考它的源码,来一探究竟: 

除了默认构造函数之外,都需要提供一个数据源。既然有set方法,依据我们之前学过的依赖注入,我们可以 在配置文件中配置这些对象。

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 最基本使用 (增删查改)

注意查询所有的时候query查询,要自己创建一个类AccountRowMapper去实现RowMapper,将查询到的结果封装到这个类中。

1.5 在 dao 中使用 JdbcTemplate

1.5.1 准备实体类 

1.5.2 第一种方式:在 dao 中定义 JdbcTemplate

账户的接口 

/**

* 账户的持久层实现类  * 此版本的 dao,需要给 dao注入 JdbcTemplate  */

配置文件

思考: 此种方式有什么问题吗? 答案: 有个小问题。就是我们的 dao 有很多时,每个 dao 都有一些重复性的代码。下面就是重复代码: private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } 能不能把它抽取出来呢?

1.5.3 第二种方式:让 dao 继承 JdbcDaoSupport

JdbcDaoSupport 是spring 框架为我们提供的一个类,该类中定义了一个 JdbcTemplate 对象,我们可以 直接获取使用,但是要想创建该对象,需要为其提供一个数据源:具体源码如下:

账户的接口

账户的持久层实现类 * 此版本 dao,只需要给它的父类注入一个数据源

配置文件:

思考: 两版 Dao有什么区别呢? 答案: 第一种在 Dao类中定义 JdbcTemplate 的方式,适用于所有配置方式(xml和注解都可以)。 第二种让 Dao继承 JdbcDaoSupport 的方式,只能用于基于 XML 的方式,注解用不了。

第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 注解

该注解的属性和 xml 中的属性含义一致。该注解可以出现在接口上,类上和方法上。 出现接口上,表示该接口的所有实现类都有事务支持。 出现在类上,表示类中所有方法有事务支持 出现在方法上,表示方法有事务支持。 以上三个位置的优先级:方法>类>接口

2.4.2.3 第三步:在配置文件中开启 spring 对注解事务的支持 

2.4.3 不使用 xml的配置方式

2.4.3.1编写配置类

/**

* 和连接数据库相关的配置类

*/

用于代替:

/**

* 和事务相关的配置类

*/

用于代替:

/**

* spring的配置类,相当于bean.xml

*/

测试:

你可能感兴趣的:(spring04)