一、引言

上一篇文章,学习了AOP相关知识,并做了一个简单的Hello world。本文在上篇文章的基础上,进一步学习下Spring的声明式事务。

二、相关概念

1. 事务(Transaction)——它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位

2. 事务的几大特性(A、C、I、D):

  A——Atomicity(原子性)。数据库中的事务执行是作为原子。即不可再分,整个语句要么执行,要么不执行。

  C——Consistency(一致性)。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

  I——Isolation(隔离性)。事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

  D——Durability(持久性)。事务完成后,对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

3.spring中事务有以下5中属性:

  (1)传播行为。即事务的传递,例如:

     PROPAGATION_MANDATORY:该方法必须运行在一个事务中。如果当前事务不存在则抛出异常。

     PROPAGATION_NEVER:当前方法不应该运行在一个事务中。如果当前存在一个事务,则抛出异常.

     PROPAGATION_REQUIRED:该方法必须运行在一个事务中。如果一个事务正在运行,该方法将运行在这个事务中。否则,就开始一个新的事务。

     ...

  (2)隔离级别。多个事务并发执行,会产生脏读,不可重复读,幻读等问题,为避免这些问题,常常会设置隔离级别

  (3)只读。主要用于优化

  (4)超时。释放资源

  (5)回滚规则。

4.多个事务并发运行,产生的问题:

  (1)脏读(Dirty read)。当事务读取还未被提交的数据时。(读未提交)

  (2)不可重复读(Nonrepeatable read)。同一个事务中两次读取同一数据,每次得到的数据都不一样。(读不回去,其他事务是更新操作)

  (3)幻读(Phantom read)。一个事务在进行相同条件的两次或两次以上查询,结果在稍后的相同条件的查询中读取的结果不一样,会发现原来没有的记录。(读多了,其他事务是插入操作)

5.隔离级别:

  (1)读未提交(Read Uncommitted,ansi sql值:1 ).允许脏读取,但不允许更新丢失。

  (2)读已提交(Read Committed,ansi sql值:2 ).允许不可重复度,但不允许脏读取。

  (3)可以重复读(Repeatable Read,ansi sql值:4 ).禁止不可重复读和脏读取,但是有时可能出现幻影数据。

  (4)串行化(Serializable,ansi sql值:8 ).提供严格的事务隔离。它要求事务序列化执行,不支持并发。

6.spring的事务机制主要有两种:编程式事务和声明式事务。

  编程式事务:所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。

  声明式事务:在Spring中,主要是通过AOP来完成声明式的事务管理。

三、实例

1.建库建表。使用MySQL新建TEST库,然后新建CUSTOMER表。脚本如下:

1 CREATE TABLE `customer` (
2   `RECID` int(10) NOT NULL AUTO_INCREMENT,
3   `NAME` varchar(100) NOT NULL,
4   `AGE` int(3) NOT NULL,
5   PRIMARY KEY (`RECID`)
6 )

 

2.新建项目,并引入相关jar包

项目结构:JavaEE学习之Spring声明式事务

pom.xml:

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3     <modelVersion>4.0.0</modelVersion>
  4     <groupId>com.wzhang</groupId>
  5     <artifactId>spring-demo</artifactId>
  6     <packaging>war</packaging>
  7     <version>0.0.1-SNAPSHOT</version>
  8     <name>spring-demo Maven Webapp</name>
  9     <url>http://maven.apache.org</url>
 10     <properties>
 11         <junit.version>3.8.1</junit.version>
 12         <log4j.version>1.2.17</log4j.version>
 13         <javax.servlet.version>2.5</javax.servlet.version>
 14         <org.hibernate.version>4.1.7.Final</org.hibernate.version>
 15         <org.springframework.version>3.2.3.RELEASE</org.springframework.version>
 16         <org.apache.struts.version>2.3.16.3</org.apache.struts.version>
 17     </properties>
 18     <dependencies>
 19         <dependency>
 20             <groupId>junit</groupId>
 21             <artifactId>junit</artifactId>
 22             <version>${junit.version}</version>
 23             <scope>test</scope>
 24         </dependency>
 25         <dependency>
 26             <groupId>javax.servlet</groupId>
 27             <artifactId>servlet-api</artifactId>
 28             <version>${javax.servlet.version}</version>
 29         </dependency>
 30         <!-- Spring -->
 31         <dependency>
 32             <groupId>org.springframework</groupId>
 33             <artifactId>spring-beans</artifactId>
 34             <version>${org.springframework.version}</version>
 35         </dependency>
 36         <dependency>
 37             <groupId>org.springframework</groupId>
 38             <artifactId>spring-context</artifactId>
 39             <version>${org.springframework.version}</version>
 40         </dependency>
 41         <dependency>
 42             <groupId>org.springframework</groupId>
 43             <artifactId>spring-core</artifactId>
 44             <version>${org.springframework.version}</version>
 45         </dependency>
 46 
 47         <dependency>
 48             <groupId>org.springframework</groupId>
 49             <artifactId>spring-web</artifactId>
 50             <version>${org.springframework.version}</version>
 51         </dependency>
 52         <dependency>
 53             <groupId>org.springframework</groupId>
 54             <artifactId>spring-expression</artifactId>
 55             <version>${org.springframework.version}</version>
 56         </dependency>
 57         <dependency>
 58             <groupId>org.springframework</groupId>
 59             <artifactId>spring-aop</artifactId>
 60             <version>${org.springframework.version}</version>
 61         </dependency>
 62         <dependency>
 63             <groupId>org.springframework</groupId>
 64             <artifactId>spring-orm</artifactId>
 65             <version>${org.springframework.version}</version>
 66         </dependency>        
 67         <dependency>
 68             <groupId>org.springframework</groupId>
 69             <artifactId>spring-tx</artifactId>
 70             <version>${org.springframework.version}</version>
 71         </dependency>
 72         
 73         <!-- Hibernate -->
 74         <dependency>
 75             <groupId>org.hibernate</groupId>
 76             <artifactId>hibernate-core</artifactId>
 77             <version>${org.hibernate.version}</version>
 78         </dependency>
 79         
 80         <!-- Log4j -->
 81         <dependency>
 82             <groupId>log4j</groupId>
 83             <artifactId>log4j</artifactId>
 84             <version>${log4j.version}</version>
 85         </dependency>
 86         
 87         <!-- MySQL -->
 88         <dependency>
 89             <groupId>mysql</groupId>
 90             <artifactId>mysql-connector-java</artifactId>
 91             <version>5.1.25</version>
 92         </dependency>
 93         
 94         <!-- AOP -->
 95         <dependency>
 96             <groupId>aopalliance</groupId>
 97             <artifactId>aopalliance</artifactId>
 98             <version>1.0</version>
 99         </dependency>
100         <dependency>
101             <groupId>org.aspectj</groupId>
102             <artifactId>aspectjweaver</artifactId>
103             <version>1.7.2</version>
104         </dependency>
105         
106         <!-- annotation -->
107         <dependency>
108             <groupId>javax.annotation</groupId>
109             <artifactId>jsr250-api</artifactId>
110             <version>1.0</version>
111         </dependency>
112     </dependencies>
113     <build>
114         <finalName>spring-demo</finalName>
115     </build>
116 </project>
Pom.xml

相关文章:

  • 2021-07-25
  • 2021-10-30
  • 2022-12-23
  • 2021-11-24
  • 2021-09-21
  • 2021-11-09
  • 2021-04-18
  • 2021-08-21
猜你喜欢
  • 2021-12-14
  • 2022-12-23
  • 2022-12-23
  • 2021-10-14
  • 2021-10-02
  • 2021-05-13
相关资源
相似解决方案