【使用SSM框架开发企业级应用】MyBatis与Spring的整合

Spring对MyBatis的整合思路

  1. 加入项目所需spring/MyBatis/及整合相关的jar文件
  2. 建立开发目录结构,创建实体类
  3. 创建数据访问接口
  4. 配置sql映射文件
  5. 配置MyBatis配置文件

要在Spring中使用MyBatis,需要在Spring的配置文件中定义一些类

实现Spring和MyBatis整合

  1. 配置数据源
  2. 配置SqlSessionFactoryBean

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

3.使用SqlSessionTemplate实现数据库的操作

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

4.使用MapperFactoryBean注入映射器

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

5.使用MapperScannerConfigurer注入映射器

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

需求说明

实现Spring整合MyBatis

使用SqlSessionTemplate实现根据条件(用户名称、角色ID)查询用户列表

配置数据源

配置SqlSessionFactoryBean

使用SqlSessionTemplate实现数据库的操作

编写业务逻辑代码并测试

注入映射器实现

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

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

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

Sql映射文件中须遵循以下命名原则:

  1. 映射的命名空间和映射器接口的名称相同
  2. 映射元素的id和映射器接口的方法相同

使用MapperScannerConfigurer

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

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

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

为业务层添加声明式事务

配置声明式事务

配置步骤

  1. 导入tx和aop命名空间
  2. 定义事务管理器Bean,并为其注入数据源Bean
  3. 通过<tx:advice>配置事务增强,绑定事务管理器并针对不同方法定义事务规则
  4. 配置切面,将事务增强与方法切入点组合

事务属性

  • propagation:事务传播机制
  1. REQUIRED(默认值)REQUIRED能够满足大多数的事务需求可以作为首选的事务传播行为

 

  1. REQUIRES_NEW:表示总是开启一个新的事务.如果一个事务已存在,则将这个存在的事务挂起,开启新事物执行该方法
  2. MANDATORY:表示如果存在一个事务,则支持当前事务;如果当前没有一个活动的事务,则抛出异常
  3. NESTED:表示如果当前存中一个活动的事务,则创建一个事务作为当前事务的嵌套事务运行;如果没有当前事务,该取值与REQUIRED相同
  4. SUPPORTS:表示如果存在一个事务,则支持当前事务;如果没有当前事务,则按非事务方式执行
  5. NOT_SUPPORTED:表示总是以非事务方式执行,如果一个事务已存在,则这个存中的事务挂起.然后执行该方法
  6. NEVER:表示总是以非事务方式执行,如果当前存中一个活动的事务,则抛出异常
  • isolation:事务隔离等级
  1. DEFAULT(默认值)
  2. READ_COMMITTED提交读
  3. READ_UNCOMMITTED未提交读
  4. REPEATABLE_READ可重复读
  5. SERIALIZABLE串行读

 

  • timeout:事务超时时间,允许事务运行的最长时间,以秒为单位。默认值为-1,表示不超时
  • read-only:事务是否为只读,默认值为false
  • rollback-for:设定能够触发回滚的异常类型
  • Spring默认只在抛出runtime exception时才标识事务回滚
  • 可以通过全限定类名指定需要回滚事务的异常,多个类名用逗号隔开
  • no-rollback-for:设定不触发回滚的异常类型
  • Spring默认checked Exception不会触发事务回滚
  • 可以通过全限定类名指定不需回滚事务的异常,多个类名用英文逗号隔开

使用注解实现事务处理

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

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

默认的@Transactional:

  • 事务传播设置是PROPAGATION_REQUIRED
  • 事务隔离级别是ISOLATION_DEFAULT
  • 事务是读/写
  • 事务超时默认默认是依赖于事务系统的,或者事务超时没有被主持
  • 任何RuntimeException将触发事务回滚,但是任何checked Exception将不触发事务回滚

这些默认的设置也是可以改变的

属性

类型

说明

rollbackFor

一组 Class 类的实例,必须是Throwable的子类

一组异常类,遇到时 必须 回滚。使用举例:@Transactional(

rollbackFor={SQLException.class}),多个异常用逗号隔开

rollbackForClassName

一组 Class 类的名字,必须是Throwable的子类

一组异常类名,遇到时 必须 回滚。使用举例:@Transactional(

rollbackForClassName={

"SQLException"}),多个异常用逗号隔开

noRollbackFor

一组 Class 类的实例,必须是Throwable的子类

一组异常类,遇到时 必须不 回滚

noRollbackForClassName

一组 Class 类的名字,必须是Throwable的子类

一组异常类名,遇到时 必须不 回滚

本章总结

  • MyBatis-Spring提供了SqlSessionTemplate模板类操作数据库,常用的方法有selectList()、insert()、update()、使用getMapper(Class<T>Type)可以直接访问接口实例,能够减少错误的发生,另外可以不用写Dao的实现类
  • 使用MapperFactoryBean能够以配置的方式得到映射实现,简化Dao开发.前提条件是,保证映射命名空间名和接口的名称相同,以及映射元素的id和接口方法相同
  • 使用MapperScannerConfigurer可以递归扫描basePackage所指定的包下的所有接口类,在Service中可以使用@Autowired或@Resource注解注入这些映射接口的Bean
  • Spring和MyBatis整合可以采用Spring的事务管理,包括使用xml和注解配置事务管理

内容就到这,

我是陈恰恰.77

猜你喜欢

转载自blog.csdn.net/qq_41770735/article/details/82854299