什么是事务?
在编写业务的过程中,会需要进行事务处理,当需要执行多条插入语句时,如果前几条成功,而最后一条失败,那么我们需要回滚数据库操作,保持数据的一致性和完整性,此时,就需要利用DB的事务处理。事务是恢复和并发控制的基本单位。
简单来说,所谓的事务,是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
MyBatis集成Spring事务管理
在SSM框架中,使用的是Spring的事务管理机制。Spring可以使用编程式实现事务,声明式实现事务以及注解式实现事务。本文主要说一下如何使用注解式@Transanctional实现实现事务管理。
本文代码例子基于上一篇博文,具体代码《SSM三大框架整合详细教程》中已经给出。简单看下目录结构以及实体类:
1、配置spring-mybatis.xml文件
如要实现注解形式的事务管理,只需要在配置文件中加入以下代码即可:
- <!-- 开启事务注解驱动 -->
- <tx:annotation-driven />
- <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
当然,如果此时xml文件报错,那是由于没有引入xmlns和schema导致的,无法识别文档结构。引入头文件即可,以下是我的,根据自己需要引入:
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.1.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
2、如何使用
在此用一个小例子来测试事务管理是否成功配置。代码基础是SSM框架搭建里面的测试代码。我们现在测试的方法是:我要插入一个User对象的集合,如果此对象数量小于2,那么可以成功插入,但是如果大于2,那么就抛出异常(事务处理必须抛出异常,只有这样Spring才帮助事务回滚),这样数据库就会回滚,不插入任何数据。测试结果如果数据库没插入任何数据,那么表示事务处理配置成功,反正,失败。
注意@Transactional只能被应用到public方法上,对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能。
实体类、DAO接口,业务接口,以及业务实现都有,这个测试仅需要在业务层中添加一个方法,然后使用JUnit测试即可,业务实现类中添加如下方法,注意注解@Transactional:
- /**
- * 事务处理必须抛出异常,Spring才会帮助事务回滚
- * @param users
- */
- @Transactional
- @Override
- public void insertUser(List<User> users) {
- // TODO Auto-generated method stub
- for (int i = 0; i < users.size(); i++) {
- if(i<2){
- this.userDao.insert(users.get(i));
- }
- else {
- throw new RuntimeException();
- }
- }
- }
接下来在测试类中添加如下方法进行测试:
- @Test
- public void testTransaction(){
- List<User> users = new ArrayList<User>();
- for(int i=1;i<5;i++){
- User user = new User();
- user.setAge(i);
- user.setPassword(i+"111111");
- user.setUserName("测试"+i);
- users.add(user);
- }
- this.userService.insertUser(users);
- }
注意:此时进行JUnit测试会发现出现错误,这是因为方法中抛出了这个异常。实质上确实进行了事务管理,数据没有插入,此时表示配置成功了;反之,如果去掉注解,那么前两条数据会插入成功,然后后面会抛出异常。
相关推荐
### SSM框架——详细整合教程 #### 一、基本概念 **1.1 Spring** Spring 是一个开源框架,最初由 Rod Johnson 在他的著作《Expert One-On-One J2EE Development and Design》中提出部分理念和原型,随后发展成为...
SSM框架,全称为Spring、SpringMVC和MyBatis的整合框架,是Java开发中常用的Web应用程序开发架构。SSM框架的整合旨在提供一种高效、灵活且易于维护的开发方式,尤其适用于大型的企业级应用。 1. **Spring框架**: ...
### SSM框架——详细整合教程 #### 一、基本概念 **1.1 Spring** Spring 是一个开源框架,最初由 Rod Johnson 在他的著作《Expert One-On-One J2EE Development and Design》中提出部分理念和原型,随后发展成为...
本文将详细解析SSM框架的整合过程,以帮助初学者理解其核心概念和工作原理。 首先,Spring框架是整个SSM的核心,它提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)...
SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java开发中的主流Web应用框架组合。这个详细整合教程将带你深入了解这三个组件如何协同工作,构建高效、灵活的后端服务。以下是对SSM框架核心知识点的深入解析。 *...
SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java Web开发中广泛使用的三大组件。这个详细整合教程旨在帮助开发者了解如何将这三个框架有效地结合在一起,以构建高效、灵活的Web应用程序。 首先,Spring框架是...
SSM框架,即Spring、SpringMVC和...这个"SpringMVC精品资源-- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)"压缩包可能包含了从基础概念到实战示例的全面教程,对于学习和提升SSM框架的整合应用大有裨益。
### SSM框架——详细整合教程(Spring+SpringMVC+MyBatis) #### 一、基础知识概览 **SSM框架**是由三个独立但又能紧密结合在一起的框架组成:**Spring**、**SpringMVC**和**MyBatis**。这三个框架在Java Web开发中...
SpringBoot整合SSM框架是将Spring、SpringMVC和MyBatis这三大流行Java开发组件融合到一起,以便简化Web应用的开发流程。这个最简单的示例将带你一步步了解如何在SpringBoot项目中实现SSM集成,从而提高开发效率。 ...
SSM框架,即Spring、SpringMVC和Mybatis的整合,是Java开发中常见的Web应用程序框架组合。这个框架集合提供了全面的企业级应用解决方案,能够帮助开发者有效地管理后端服务、控制层逻辑和数据访问层。以下是对SSM...
SSM框架,即Spring、SpringMVC和Mybatis的集成框架,是Java开发Web应用...这个教程源码应该包含了这些步骤的详细实现,通过学习和实践,你可以掌握SSM框架的搭建和使用,为开发高效、稳定的Java Web应用打下坚实基础。
SSM框架的搭建涉及多个层面,包括环境配置、Maven管理、各组件的配置以及业务逻辑的实现。理解每个组件的功能和相互间的协作是成功搭建项目的关键。在实际开发中,还需要考虑异常处理、日志记录、安全性等多方面因素...
总的来说,"ssm框架实战项目——超市订单管理系统"是一个综合性的学习资源,涵盖了SSM框架的各个核心组件,有助于开发者提升Java Web开发技能,理解企业级应用的开发流程和最佳实践。实践中遇到的问题和解决方法,...
8. **数据库集成**:在SSM框架中,数据库连接和事务管理都是由Spring来处理的。MyBatis与Spring结合使用,可以实现声明式事务管理,提高应用程序的稳定性和可靠性。 9. **构建与运行**:使用Maven或Gradle等构建...
SSM整合是Java Web开发中常见的一种技术栈组合,它由Spring、SpringMVC和MyBatis三个核心组件构成,为开发者提供了强大的企业级应用开发...在实践中不断学习和探索,你将能熟练运用SSM框架构建高效稳定的Java Web应用。
SSM框架是Java Web开发中常用的三大组件——Spring、SpringMVC和Mybatis的集成,它们共同构建了一个灵活且强大的后端服务架构。这五个思维导图分别详细描绘了SSM框架的各个组成部分以及它们之间的关系,对于理解和...
在"期末大作业——SSM框架汇通国际物流项目"中,学生运用了这些技术来构建一个完整的物流管理系统。 1. **Spring框架**:Spring是Java企业级应用的核心框架,提供了IOC(Inversion of Control,控制反转)和AOP...