事务
一个使用 MyBatis-Spring 的主要原因是它允许 MyBatis 参与到 Spring 的事务管理中。而 不是给 MyBatis 创建一个新的特定的事务管理器,MyBatis-Spring 利用了存在于 Spring 中的 DataSourceTransactionManager。
一旦 Spring 的 PlatformTransactionManager 配置好了,你可以在 Spring 中以你通常的做 法来配置事务。@Transactional 注解和 AOP(Aspect-Oriented Program,面向切面编程,译 者注)样式的配置都是支持的。在事务处理期间,一个单独的 SqlSession 对象将会被创建 和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。
一旦事务创建之后,MyBatis-Spring 将会透明的管理事务。在你的 DAO 类中就不需要额 外的代码了。
标准配置
要 开 启 Spring 的 事 务 处 理 , 在 Spring 的 XML 配 置 文 件 中 简 单 创 建 一 个 DataSourceTransactionManager 对象:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
指定的 DataSource 一般可以是你使用 Spring 的任意 JDBC DataSource。这包含了连接 池和通过 JNDI 查找获得的 DataSource。
要注意, 为事务管理器指定的 DataSource 必须和用来创建 SqlSessionFactoryBean 的 是同一个数据源,否则事务管理器就无法工作了。
容器管理事务
如果你正使用一个 JEE 容器而且想让 Spring 参与到容器管理事务(Container managed transactions,CMT,译者注)中,那么 Spring 应该使用 JtaTransactionManager 或它的容 器指定的子类来配置。做这件事情的最方便的方式是用 Spring 的事务命名空间:
<tx:jta-transaction-manager />
在这种配置中,MyBatis 将会和其它由 CMT 配置的 Spring 事务资源一样。Spring 会自动 使用任意存在的容器事务,在上面附加一个 SqlSession。如果没有开始事务,或者需要基 于事务配置,Spring 会开启一个新的容器管理事务。
注 意 , 如 果 你 想 使 用 CMT , 而 不 想 使 用 Spring 的 事 务 管 理 , 你 就 必 须 配 置 SqlSessionFactoryBean 来使用基本的 MyBatis 的 ManagedTransactionFactory 而不是其 它任意的 Spring 事务管理器:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="transactionFactory">
<bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property>
</bean>
编程式事务管理
MyBatis 的 SqlSession 提供指定的方法来处理编程式的事务。 但是当使用 MyBatis-Spring 时, bean 将会使用 Spring 管理的 SqlSession 或映射器来注入。 那就是说 Spring 通常是处理 事务的。
你 不 能 在 Spring 管 理 的 SqlSession 上 调 用 SqlSession.commit() , SqlSession.rollback() 或 SqlSession.close() 方 法 。 如 果 这 样 做 了 , 就 会 抛 出 UnsupportedOperationException 异常。注意在使用注入的映射器时不能访问那些方法。
无论 JDBC 连接是否设置为自动提交, SqlSession 数据方法的执行或在 Spring 事务之外 任意调用映射器方法都将会自动被提交。
如果你想编程式地控制事务,请参考 Spring 手册的 10.6 节。这段代码展示了如何手动 使用在 10.6.2 章节描述的 PlatformTransactionManager 来处理事务。
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = txManager.getTransaction(def);
try {
userMapper.insertUser(user);
}
catch (MyException ex) {
txManager.rollback(status);
throw ex;
}
txManager.commit(status);
注意这段代码展示了一个映射器,但它也能和 SqlSession 一起使用。
分享到:
相关推荐
2. **事务管理**:通过Spring的TransactionManager,MyBatis-Spring可以提供声明式事务管理,使得事务控制更加灵活和易于维护。 3. **SqlSessionFactoryBean**:MyBatis-Spring提供了一个SqlSessionFactoryBean,它...
在MyBatis-Spring整合中,我们需要配置TransactionManager,例如使用DataSourceTransactionManager,并将其应用到Spring的事务管理中。 4. **Mapper接口与XML配置**: MyBatis中的Mapper接口可以与XML配置文件配合...
《Spring Boot集成MyBatis详解》 在Java开发领域,Spring Boot以其简洁的配置和快速的启动特性,已经成为构建微服务应用的首选框架。而MyBatis作为一款强大的持久层框架,深受开发者喜爱,它提供了灵活的SQL映射...
通过集成Spring的TransactionManager,可以实现数据库事务的自动化管理,保证数据的一致性。源码中,`MyBatisTransactionManager`类实现了这一功能,它会管理SqlSession的开启、提交和回滚。 总的来说,mybatis-...
当使用MyBatis-Spring时,应该在`mybatis-config.xml`中包含`transactionManager`和`dataSource`部分。当注入映射器时,还需要指定映射器列表。 #### 第三章 注入映射器 ##### 3.1 注入映射器 MyBatis-Spring提供...
3. **事务管理**:`MyBatis-Spring`支持通过Spring的`TransactionManager`来管理事务,从而简化了事务处理逻辑。 #### 四、核心组件详解 1. **SqlSessionFactoryBean**:用于创建`SqlSessionFactory`的Spring Bean...
接下来,配置Spring的DataSource和TransactionManager。在application.properties或application.yml文件中设置数据库连接信息: ```properties # application.properties 示例 spring.datasource.url=jdbc:mysql://...
- MyBatis-Plus的事务管理可以通过Spring的TransactionManager进行,也可以手动控制,提供了一套完整的事务处理机制。 通过对MyBatis-Plus 3.5.1源码的学习,开发者可以更好地理解其内部实现,从而更高效地利用这...
5. **事务管理**:MyBatis-Spring提供了TransactionManager,可以与Spring的PlatformTransactionManager接口集成,实现全局事务管理。配置如下: ```xml <bean id="transactionManager" class="org.spring...
5. **TransactionManager**:MyBatis-Spring 提供了基于 Spring 的 PlatformTransactionManager 实现,可以处理事务的开始、提交、回滚。它可以与其他 Spring 事务管理策略无缝集成。 深入源码,我们可以看到 ...
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> ``` 3. **配置Mapper**:在Spring配置文件中,为每个Mapper接口声明一个Bean,将Mapper接口与对应...
Spring Boot默认提供了DataSource和TransactionManager的配置。如果使用JDBC数据源,可以配置`spring.datasource.*`属性;如果使用其他数据库,如JPA,需要配置对应的数据库连接。 6. **Service层与Repository层**...
1. 自动配置:Spring Boot自动配置了SqlSessionFactory、TransactionManager等关键组件,无需开发者手动配置。 2. 零XML配置:通过Java配置方式,开发者可以直接在Mapper接口中定义SQL语句,简化了配置过程。 3. ...
整合Spring与MyBatis的关键在于Spring的DataSource、TransactionManager以及SqlSessionFactoryBean。DataSource是数据源,负责管理数据库连接;TransactionManager则是事务管理器,用于控制事务的边界;...
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> ...
MyBatis-Spring 整合教程 在Java开发中,Spring框架因其强大的依赖注入和管理能力,被广泛应用。而MyBatis作为一个轻量级的持久层框架,以其灵活的SQL映射和简单易用的特性受到开发者的青睐。将两者整合,能够充分...
Spring Boot Starter MyBatis会自动配置MyBatis的核心组件,包括SqlSessionFactory、DataSource、TransactionManager等。同时,它还支持自动扫描Mapper接口,使得无需手动创建SqlSessionTemplate或...
"spring-boot-starter-mybatis"就是这样一个starter,它包含了MyBatis框架所需的所有基础依赖,如MyBatis本身、SqlSessionFactoryBuilder、TransactionManager等,使得我们无需手动配置就能快速启动MyBatis。...
`spring-boot-starter-mybatis`是Spring Boot为MyBatis提供的起步依赖,它包含MyBatis核心库、SqlSessionFactoryBuilder、SqlSessionFactory等必备组件,同时自动配置了DataSource、TransactionManager等,使得...
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> *:mapper/*.xml"/> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> ``` #### 六、注意事项 在...