【Spring】(七)MyBatis与Spring整合步骤细解以及配置声明式事务

简介: 【Spring】(七)MyBatis与Spring整合步骤细解以及配置声明式事务

文章目录


整合步骤概述

配置文件中定义的一些类

使用MapperFactoryBean注入映射器

使用MapperScannerConfigurer注入映射器

小结

业务层添加声明式事务

配置声明式事务

事务属性

使用注解实现事务处理


整合步骤概述


20191106212443524.png


配置文件中定义的一些类


SqlSessionFactoryBean

为整合应用提供SqlSession对象资源


SqlSessionTemplate

负责管理MyBatis的SqlSession,调用SQL映射语句,实现对数据库的访问


MapperFactoryBean

根据指定Mapper接口生成Bean实例


MapperScannerConfigurer

根据指定包批量扫描Mapper接口并生成实例


使用MapperFactoryBean注入映射器


采用数据映射器(MapperFactoryBean)的方式完成对数据库操作


根据Mapper接口获取Mapper对象,它封装了原有的SqlSession.getMapper()功能的实现

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="cn.smbms.dao.user.UserMapper"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>


指定映射器,只能是接口类型


注入SqlSessionFactory以提供SqlSessionTemplate实例


映射器对应的SQL映射文件与映射器的类路径相同,该映射文件可以自动被MapperFactoryBean解析


使用MapperScannerConfigurer注入映射器


若映射器很多的话,相应的配置项也会很多,如何简化配置工作量?


使用MapperScannerConfigurer,自动扫描指定包下的Mapper接口,并将它们直接注册为MapperFactoryBean


<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.smbms.dao" />
</bean>


指定扫描的基准包


MapperScannerConfigurer递归扫描基准包下所有接口,若它们在SQL映射文件中定义过,则动态注册为MapperFactoryBean,如此即可批量产生映射器实现类


小结


MapperScannerConfigurer 与@Autowired注解或@Resource注解配合使用,自动创建映射器实现并注入给业务组件,能够最大限度地减少DAO组件与业务组件的编码和配置工作

@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired  // 或 @Resource
    private UserMapper userMapper;
    //……代码省略
}


<!-- 省略数据源、 SqlSessionFactoryBean的相关配置 -->
<!-- 配置DAO -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.smbms.dao" />
</bean>
<!-- 配置扫描注解定义的业务Bean -->
<context:component-scan base-package="cn.smbms.service" />


业务层添加声明式事务


如何在添加用户的业务流程中控制事务?


可以采用MyBatis控制事务

事务应该在业务逻辑层控制

硬编码方式,代码繁琐,且破坏分层,代码不易维护


可以采用AOP的方式实现

Spring提供了声明式事务支持


配置声明式事务


配置步骤 :


1.导入tx和aop命名空间

2.定义事务管理器Bean,并为其注入数据源Bean

3.通过<tx:advice>配置事务增强,绑定事务管理器并针对不同方法定义事务规则

4.配置切面,将事务增强与方法切入点组合


事务属性


propagation:事务传播机制


REQUIRED(默认值)


REQUIRES_NEW 、MANDATORY、NESTED


SUPPORTS


NOT_SUPPORTED、NEVER


REQUIRED能够满足大多数的事务需求可以作为首选的事务传播行为


isolation:事务隔离等级


DEFAULT(默认值)


READ_COMMITTED


READ_UNCOMMITTED


REPEATABLE_READ


SERIALIZABLE


timeout:事务超时时间,允许事务运行的最长时间,以秒为单位。默认值为-1,表示不超时


read-only:事务是否为只读,默认值为false


rollback-for:设定能够触发回滚的异常类型


Spring默认只在抛出runtime exception时才标识事务回滚


可以通过全限定类名指定需要回滚事务的异常,多个类名用逗号隔开


no-rollback-for:设定不触发回滚的异常类型


Spring默认checked Exception不会触发事务回滚


可以通过全限定类名指定不需回滚事务的异常,多个类名用英文逗号隔开


使用注解实现事务处理


在Spring配置文件中配置事务管理类,并添加对注解配置的事务的支持

<bean id="txManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>


使用@Transactional为方法添加事务支持

@Transactional
@Service("userService")
public class UserServiceImpl implements UserService {
  ……
  @Transactional(propagation = Propagation.SUPPORTS)
    public List<User> findUsersWithConditions(User user) {
        // 省略实现代码
    }}


20191106231356157.png


20191106231410289.png




目录
相关文章
|
2月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
337 4
|
2月前
|
SQL Java 关系型数据库
Spring事务传播机制:7种姿势教你玩转"事务接力赛"
事务传播机制是Spring框架中用于管理事务行为的重要概念,它决定了在方法调用时事务如何传递与执行。通过7种传播行为,开发者可以灵活控制事务边界,适应不同业务场景。例如:REQUIRED默认加入或新建事务,REQUIRES_NEW独立开启新事务,NESTED支持嵌套回滚等。合理使用传播机制不仅能保障数据一致性,还能提升系统性能与健壮性。掌握这“七种人格”,才能在复杂业务中游刃有余。
|
3月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
278 18
|
3月前
|
Java 关系型数据库 数据库
深度剖析【Spring】事务:万字详解,彻底掌握传播机制与事务原理
在Java开发中,Spring框架通过事务管理机制,帮我们轻松实现了这种“承诺”。它不仅封装了底层复杂的事务控制逻辑(比如手动开启、提交、回滚事务),还提供了灵活的配置方式,让开发者能专注于业务逻辑,而不用纠结于事务细节。
|
5月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1001 1
Spring boot 使用mybatis generator 自动生成代码插件
|
5月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
227 1
|
4月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
155 0
|
5月前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
450 1
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
XML Java 数据库
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
100 0
下一篇
oss云网关配置