最近在和朋友做一个项目,考虑用springmvc+mybatis来做,之前在公司工作吧,对于数据库这块的配置也有人再弄,最近因为这个项目,我就上网学习了一些关于数据库配置这方面的东西吧,今天给大家分享一下关于spring+mybatis管理事务这方面得知识吧。
先说说spring管理事务的集中方式,我所了解的有两种:第一种是编程式事务管理,第二种是声明式事务管理,而声明式事务管理中又有两种,一种是配置方式,另一种是声明式。我们在工作中一般都使用声明式事务管理配置,因为这种方式不对代码的进行侵入。下面我把一段配置贴出来,是我现在要和朋友做的项目的关于数据库的配置。
<bean id="dbConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:jdbc.properties</value> </property> </bean> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="initialSize" value="${dbcp.initialSize}"/> <property name="minIdle" value="${dbcp.minIdle}"/> <property name="maxIdle" value="${dbcp.maxIdle}"/> <property name="maxActive" value="${dbcp.maxActive}"/> <property name="maxWait" value="${dbcp.maxWait}"/> <property name="maxOpenPreparedStatements" value="${dbcp.maxOpenPreparedStatements}"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" > <property name="mapperLocations" value="classpath:com/wealth/map/*.xml" /> <property name="dataSource" ref="dataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.wealth.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 启动spring事务注解,事务注解尽在此 --> <tx:annotation-driven transaction-manager="transactionManager" />
今天我们的重点不是这些配置,而是对于事务特性进行一些了解:
1、事务的隔离级别
隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:
TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。
TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
2、事务的传播行为
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
其实我觉得事务的传播行为就是当你在当前事务的方法中去执行另一个存在事务的方法的一个传播行为。
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。TransactionDefinition.PROPAGATION_NESTED--如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
相关推荐
5、测试Spring+mybatis的框架搭建,写单元测试JUnit,测试事务配置等:model-->dao(mapper)-->service-->test 6、映入SpringMVC:配置SpringMVC配置信息。-->配置文件:spring-mvc.xml(扫描controller) 7...
在本项目中,Spring主要负责管理Bean,如数据库连接池、事务管理、DAO和Service等。通过Spring的AOP,我们可以方便地实现事务控制和日志记录。同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action...
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
Spring是一个全面的后端开发框架,涵盖了依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问/集成以及Web应用等多个方面。在Struts2+Spring整合中,Spring负责业务层对象的管理,提供IOC(Inversion of ...
spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...
在实际项目中,开发者通常会创建一个配置文件(如:`springmvc_mybatis1208`可能包含的`spring-config.xml`),在其中配置Spring和MyBatis的相关设置,包括数据源、事务管理器、SqlSessionFactory等。同时,还需要...
对于MyBatis,我们需要创建`mybatis-config.xml`配置文件,配置数据源、事务管理器以及映射文件的位置。 数据库方面,本系统使用了MySQL,通过MyBatis的SqlSessionFactory和SqlSession对象,我们可以执行SQL语句。`...
这个系统结合了三个关键的技术组件:SpringMVC作为 MVC 框架,Spring作为核心框架处理依赖注入和事务管理,而Mybatis作为持久层框架负责数据库操作。下面将详细介绍这三个主要组成部分以及它们在系统中的作用。 1. ...
"jersey+spring+mybatis整合"就是一种常见的Java Web开发模式,它结合了RESTful服务、依赖注入和持久层管理的优势。让我们详细了解一下这三个关键组件以及它们如何协同工作。 1. **Jersey**: Jersey是Java RESTful ...
1. **配置文件**:包括Spring的bean配置文件(如`applicationContext.xml`)和MyBatis的配置文件(如`mybatis-config.xml`),它们定义了数据源、事务管理器、SqlSessionFactory以及Mapper接口的扫描路径。...
Spring的AbstractRoutingDataSource类可以用来实现动态数据源切换,它可以根据一定的规则(如事务上下文、请求参数等)选择使用哪个数据源。 Hibernate,是一个对象关系映射(ORM)框架,它允许开发者用面向对象的...
【标题】"Spring+MyBatis 简单实例图书管理系统"揭示了这是一个结合了Spring框架和MyBatis持久层框架的项目实例,主要用于管理图书数据。在IT领域,Spring和MyBatis是两个非常流行的开源Java技术,它们在企业级应用...
Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。 业务方案: 1、批处理定期提交。 2、并行批处理:并行处理工作。 3、...
SSM(Spring MVC + Spring + MyBatis)是Java Web开发中常见的三层架构组合,它将Spring MVC作为表现层框架,Spring作为业务层容器,MyBatis作为数据访问层框架。下面将详细介绍这三个组件以及它们如何协同工作。 *...
1. **Spring框架**:Spring是一个开源的Java平台,它为开发人员提供了全面的应用程序框架服务,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。Spring的核心特性可以用来创建轻量级、松耦合的Java应用程序。...
Spring作为核心框架,提供容器管理和事务控制;MyBatis负责数据访问,简化了数据库操作;SpringMVC则处理HTTP请求,实现控制器逻辑,使业务逻辑和视图分离。 【压缩包子文件的文件名称列表】"ssm"可能代表的是项目...
MyBatis与Spring的集成使得事务管理变得简单,同时保持了查询的效率和灵活性。 Quartz是一个开源的作业调度框架,常用于创建和执行定时任务。在"spring+springMVC+mybatis+quartz动态定时任务创建"项目中,Quartz...
它与Spring框架集成良好,可以使用Spring的事务管理进行控制。 **SSM框架整合** 整合SSM框架,首先需要在项目中引入这三大框架的依赖库。然后,配置Spring的ApplicationContext.xml,定义Bean,包括DataSource、...
开发者可以通过配置文件或注解来声明Bean及其依赖关系,Spring会自动管理这些Bean,提供事务管理、安全控制等多种服务。 MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。与传统的JDBC...
此外,Spring还提供了事务管理、AOP(面向切面编程)等功能,可以方便地管理和控制业务逻辑。 Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置...