【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




目录
相关文章
|
16天前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
104 26
|
29天前
|
监控 Java 数据库连接
Spring c3p0配置详解
在Spring项目中配置C3P0数据源,可以显著提高数据库连接的效率和应用程序的性能。通过合理的配置和优化,可以充分发挥C3P0的优势,满足不同应用场景的需求。希望本文的详解和示例代码能为开发者提供清晰的指导,帮助实现高效的数据库连接管理。
50 10
|
1月前
|
SQL Java 关系型数据库
【SpringFramework】Spring事务
本文简述Spring中数据库及事务相关衍伸知识点。
50 9
|
2月前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
128 13
|
2月前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
183 73
|
30天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
56 2
|
4月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
139 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
4月前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
83 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
4月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
207 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
4月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
328 1