Spring可以对MyBatis提供哪些支持? Spring IoC支持Spring两大核心思想:IoC和AOP
IoC:控制反转,Spring容器可以完成对象的创建、属性注入、对象管理等工作
AOP:面向切面,在不修改原有业务逻辑的情况下,实现对原有业务的增强
-
需要创建DataSource数据源对象
-
需要创建SqlSessionFactory对象
-
需要创建SqlSession对象
-
需要创建Dao(Mapper)对象
Spring IoC可以为MyBatis完成DataSource、SqlSessionFactory、SqlSession以及Dao对象的创建
SpringAOP支持复用工作
使用Spring提供的事务管理切面类完成对MyBatis数据库操作中的事务管理
整合MyBatis准备工作1、创建maven工程
2、部署MyBatis框架
-
添加依赖
- MySql驱动
- MyBatis
-
mysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.4.6 -
创建mybatis配置文件(空)无需进行任何配置
-
-
部署Spring框架
-
org.springframework spring-context 5.2.12.RELEASE org.springframework spring-aspects 5.2.12.RELEASE org.springframework spring-jdbc 5.2.12.RELEASE -
创建Spring配置文件
-
MyBatis-Spring
-
mybatis兼容Spring补丁
-
org.mybatis mybatis-spring 1.3.2
1、添加依赖
com.alibaba druid 1.1.10
2、创建druid.properties文件
druid.driver=com.mysql.jdbc.Driver druid.url=jdbc:mysql://localhost:3306/db_mybatis?characterEncoding=utf8&useSSL=true druid.username=root druid.password=admin ## 连接池参数 ## 初始化连接数 druid.pool.init=3 ##最小连接数 druid.pool.minIdle=3 ##最大连接数 druid.pool.maxActive=20 ##超时时间 druid.pool.timeout=30000
3、在applicationContext.xml中配置Druid数据源DataSource
整合MyBatis创建SqlSessionFactory
依赖Spring容器创建MyBatis的SqlSession对象
整合MyBatis-创建Mapper的配置
Spring整合MyBatis 整合AOP配置
事务隔离级别使用Spring提供的事务管理切面类完成Dao作用增删改操作的事务管理
- READ_UNCOMMITED(读未提交)T1在执行的过程中,T2既可以读也可以写,T1可以读取到T2未提交的数据(脏读)
- READ_COMMITED(读已提交)T1在执行的过程中,T2可以读也可以写,但是T1只能读到T2提交后的数据(不可重复读)
- REPEATABLE_READ(可重复读)T1执行过程中,T2智能读,但不能改,T2可以添加数据(幻读)
- SERIALIZABLE(串行化)T1在执行的过程中,T2既不能读也不能写
propagation中设置事务传播机制:
REQUIRED 如果上层方法没有事务,则创建一个新的事务,如果已经存在事务,则加入到事务中。
SUPPORTS如果上层方法没有事务,则以非事务方式执行:如果已经存在事务,则加入到事务中。
REQUIRES_NEW 如果上层方法没有事务,则创建一个欣的事务,如果已经存在事务,则将当前事务挂起
NOT_SUPPORTED 如果上层方法没有事务,则以非事务方式执行,如果已经存在事务,则将当前事务挂起
NEVER 如果上层方法没有事务,则以非事务方式执行,如果已经存在事务,则抛出异常。
MANDTORY 如果上层方法已经存在事务,则加入到事务中执行如果不存在事务,则抛出异常。
NESTED 如果上层方法没有事务,则创建新的事务,如果已经存在事务,则嵌套到当前事务中
SpringAOP事务管理配置
基于注解配置SpringAOP事务管理
- 在applicationContext.xml中配置事务管理,声明注解方式进行事务配置
-
在需要Spring进行事务管理的方法上添加@Transactional注解
-
@Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.SUPPORTS) public List
listUsers() { return userDao.queryUsers(); }



