Spring对MyBatis的整合思路
- 加入项目所需spring/MyBatis/及整合相关的jar文件
- 建立开发目录结构,创建实体类
- 创建数据访问接口
- 配置sql映射文件
- 配置MyBatis配置文件
要在Spring中使用MyBatis,需要在Spring的配置文件中定义一些类
实现Spring和MyBatis整合
- 配置数据源
- 配置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映射文件中须遵循以下命名原则:
- 映射的命名空间和映射器接口的名称相同
- 映射元素的id和映射器接口的方法相同
使用MapperScannerConfigurer
自动扫描指定包下的Mapper接口,并将它们直接注册为MapperFactoryBean
MapperScannerConfigurer递归扫描基准包下所有接口,若它们在SQL映射文件中定义过,则动态注册为MapperFactoryBean,如此即可批量产生映射器实现类
MapperScannerConfigurer 与@Autowired注解或@Resource注解配合使用,自动创建映射器实现并注入给业务组件,能够最大限度地减少DAO组件与业务组件的编码和配置工作
为业务层添加声明式事务
配置声明式事务
配置步骤
- 导入tx和aop命名空间
- 定义事务管理器Bean,并为其注入数据源Bean
- 通过<tx:advice>配置事务增强,绑定事务管理器并针对不同方法定义事务规则
- 配置切面,将事务增强与方法切入点组合
事务属性
- propagation:事务传播机制
- REQUIRED(默认值)REQUIRED能够满足大多数的事务需求可以作为首选的事务传播行为
- REQUIRES_NEW:表示总是开启一个新的事务.如果一个事务已存在,则将这个存在的事务挂起,开启新事物执行该方法
- MANDATORY:表示如果存在一个事务,则支持当前事务;如果当前没有一个活动的事务,则抛出异常
- NESTED:表示如果当前存中一个活动的事务,则创建一个事务作为当前事务的嵌套事务运行;如果没有当前事务,该取值与REQUIRED相同
- SUPPORTS:表示如果存在一个事务,则支持当前事务;如果没有当前事务,则按非事务方式执行
- NOT_SUPPORTED:表示总是以非事务方式执行,如果一个事务已存在,则这个存中的事务挂起.然后执行该方法
- NEVER:表示总是以非事务方式执行,如果当前存中一个活动的事务,则抛出异常
- 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配置文件中配置事务管理类,并添加对注解配置的事务的支持
使用@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