什么是事务?
在编写业务的过程中,会需要进行事务处理,当需要执行多条插入语句时,如果前几条成功,而最后一条失败,那么我们需要回滚数据库操作,保持数据的一致性和完整性,此时,就需要利用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. **Spring框架**:Spring作为核心容器,负责管理...
这个超市管理系统项目利用SSM框架进行构建,旨在实现全面的超市业务流程管理。下面将详细阐述该项目涉及的主要技术点和功能模块。 首先,Spring作为核心的依赖注入(DI)和面向切面编程(AOP)框架,为系统提供了解...
在本项目"ssm框架实现订单管理系统"中,开发者利用SSM框架来构建一个完整的订单管理功能,其中包括了对订单的查询、角色的管理等多个模块。以下是对SSM框架及订单管理系统相关知识点的详细解释: 1. **Spring框架**...
SSM框架,即Spring、SpringMVC和MyBatis的集成,是Java Web开发中常用的一种技术栈。这个"SSM框架实现登录注册功能完整代码"项目,通过IDEA(IntelliJ IDEA)进行整合,提供了从零开始构建登录注册功能的全套源码,...
5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 系统实体对象: 图书类型:图书类别,类别名称,可借阅天数 图书:图书条形码,图书名称,图书所在类别,图书价格,库存,出版社,图书图片
在"基于SSM框架的旅游从业人员管理系统"中,这三个框架协同工作,为系统提供了强大的支持: - Spring作为基础框架,管理所有组件的生命周期,包括数据库连接池、事务管理等,同时也实现了AOP以处理如日志记录、权限...
8. **数据库集成**:在SSM框架中,数据库连接和事务管理都是由Spring来处理的。MyBatis与Spring结合使用,可以实现声明式事务管理,提高应用程序的稳定性和可靠性。 9. **构建与运行**:使用Maven或Gradle等构建...
SSM框架新闻管理系统是一款基于Java开发的Web应用,主要用于实现新闻的发布、管理以及用户评论功能。这个系统采用的是Spring、SpringMVC和MyBatis这三大主流Java框架的组合,也就是我们常说的SSM框架。这个项目对于...
这个“图书管理系统”项目就是基于SSM框架实现的,它整合了Spring的强大功能、SpringMVC的优雅架构以及MyBatis的灵活数据库操作。 1. **Spring框架**:Spring是一个开源的Java平台,核心特性是依赖注入(Dependency...
《基于SSM框架的社区医院信息管理系统设计与实现》 在信息技术日新月异的今天,社区医院的信息管理系统的建设显得尤为重要。本项目是作者在学习Java编程时,利用SSM(Spring、SpringMVC、MyBatis)框架构建的一个...
本篇将详细探讨在SSM中如何进行注解式和XML配置式的事务管理,以实现数据的一致性和完整性。 **一、Spring事务管理简介** Spring作为核心容器,提供了强大的事务管理功能,支持编程式和声明式事务管理。编程式事务...
首先,SSM框架是Java Web开发中的常用组合,由Spring框架负责依赖注入和事务管理,SpringMVC作为Web层的处理,而MyBatis则用于数据库操作。这种架构的优势在于各组件分工明确,使得代码结构清晰,易于维护和扩展。 ...
SSM框架,即Spring、SpringMVC和MyBatis的集成框架,是Java Web开发中常用的三大组件。这个框架组合提供了强大的数据访问、业务逻辑处理和用户界面支持。接下来,我们将详细探讨如何利用SSM框架实现一个基础的增删改...
【SSM框架详解及其在图书借阅系统中的应用】 SSM框架是Java Web开发中常用的一种集成框架,由Spring、Spring MVC和MyBatis三个组件组成。本篇将详细介绍SSM框架的核心概念,并结合“基于SSM框架的图书借阅系统”这...
本项目"酒店管理系统"就利用了SSM框架来实现复杂的业务逻辑和数据管理。 1. **Spring框架**:作为核心容器,Spring提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)...
SSM框架是Java Web开发中常用的三大组件——Spring、SpringMVC和Mybatis的集成,它们共同构建了一个灵活且强大的后端服务架构。这五个思维导图分别详细描绘了SSM框架的各个组成部分以及它们之间的关系,对于理解和...
在SSM框架中,可以通过动态SQL来实现,例如在MyBatis的Mapper接口和XML配置文件中,根据传入的参数动态拼接WHERE子句,从而实现多样化的查询需求。 分页功能在大数据量的展示中非常重要,它可以有效地减轻服务器...
本项目源码是基于SSM框架实现的一个图书管理系统的实例,旨在帮助开发者理解如何在实际开发中运用这些技术。 首先,Spring框架是整个项目的基石,它提供依赖注入(DI)和面向切面编程(AOP)等功能,使得代码更加...
SSM框架,即Spring、SpringMVC和MyBatis的集成框架,是Java Web开发中常用的三大组件。在全注解开发模式下,这三大框架的配置和交互更简洁,减少了XML配置文件的使用,提高了开发效率。下面将详细介绍SSM框架全注解...
SSM框架是Java企业级开发中常用的一种轻量级框架组合,它提供了强大的服务层管理、控制层路由以及数据访问功能。 **Spring框架**:Spring作为基础容器,负责管理应用中的对象(bean)以及这些对象之间的依赖关系。...