【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




目录
相关文章
|
10天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
28 0
|
1月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
38 0
|
27天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
17天前
|
Java 开发者 Spring
Spring高手之路24——事务类型及传播行为实战指南
本篇文章深入探讨了Spring中的事务管理,特别是事务传播行为(如REQUIRES_NEW和NESTED)的应用与区别。通过详实的示例和优化的时序图,全面解析如何在实际项目中使用这些高级事务控制技巧,以提升开发者的Spring事务管理能力。
31 1
Spring高手之路24——事务类型及传播行为实战指南
|
10天前
|
XML Java 数据库连接
Spring中的事务是如何实现的
Spring中的事务管理机制通过一系列强大的功能和灵活的配置选项,为开发者提供了高效且可靠的事务处理手段。无论是通过注解还是AOP配置,Spring都能轻松实现复杂的事务管理需求。掌握这些工具和最佳实践,能
17 3
|
19天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
30 1
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
168 2
|
14天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
27 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
10天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
22 2