Spring整合MyBatis
本文最后更新于:1 年前
Spring两大核心思想:IoC 和 AOP
IoC : 控制反转,Spring容器可以完成对象的创建、属性注入、对象管理等工作。
AOP : 面向切面,在不修改原有业务逻辑的情况下,实现原有业务的增强。
Spring可以对MyBatis提供哪些支持?
『IoC支持』: SpringIoC可以为MyBatis完成DataSource、SqlSessionFactory、SqlSession以及DAO对象的创建。
『AOP支持』: 使用Spring提供的事务管理切面类完成对MyBatis数据库操作中的事务管理。
Spring整合MyBatis环境
1. 创建Maven工程
2. 部署MyBatis框架
添加依赖
- Mysql驱动
- mybatis
1
2
3
4
5
6
7
8
9
10
11
12
13<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>创建MyBatis配置文件(创建配置文件之后无需进行任何配置)
1
2
3
4
5
6<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
3. 部署Spring框架
添加依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>创建Spring配置文件:applicationContext.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>
4. 添加Spring整合MyBatis的依赖
mybatis-spring
就是mybatis提供的兼容Spring的补丁。
1 |
|
整合IoC配置
1. 整合Druid连接池
添加druid的依赖
1
2
3
4
5<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>创建 druid.properties 属性文件
1
2
3
4
5
6
7
8
9
10druid.driver=com.mysql.jdbc.Driver
druid.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&useSSL=false
druid.username=root
druid.password=admin123
## 连接池参数
druid.pool.init=1
druid.pool.minIdle=3
druid.pool.maxActive=20
druid.pool.timeout=30000在applicationContext.xml中配置DruidDataSource
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!--加载druid.properties属性文件-->
<context:property-placeholder location="classpath:druid.properties"/>
<!--依赖Spring容器完成数据源DataSource的创建-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${druid.driver}"/>
<property name="url" value="${druid.url}"/>
<property name="username" value="${druid.username}"/>
<property name="password" value="${druid.password}"/>
<property name="initialSize" value="${druid.pool.init}"/>
<property name="minIdle" value="${druid.pool.minIdle}"/>
<property name="maxActive" value="${druid.pool.maxActive}"/>
<property name="maxWait" value="${druid.pool.timeout}"/>
</bean>
2. 整合MyBatis—创建SqlSessionFactory
依赖Spring容器创建MyBatis的SqlSessionFactory对象:
1 |
|
3. 整合MyBatis-创建Mapper
1 |
|
4. 案例测试
User.java |
---|
UserDao.java |
---|
UserMapper.xml |
---|
applicationContext.xml |
---|
UserDaoTest.java |
---|
UserService.java |
---|
UserServiceImpl.java |
---|
applicationContext.xml |
---|
UserServiceTest.java |
---|
整合AOP配置
使用Spring提供的事务管理切面类,完成DAO中增删改操作的事务管理。
事务的隔离级别
isolation
用于设置事务隔离级别:READ_UNCOMMITTED ,READ_COMMITTED , REPEATABLE_READ , SERIALIZABLE。
事务的传播机制
propagation
设置事务的传播机制。
REQUIRED:如果上层方法没有事务,则创建一个新的事务;如果已经存在事务,则加入到事务中。
SUPPORTS:如果上层方法没有事务,则以非事务方式执行;如果已经存在事务,则加入到事务中。
REQUIRES_NEW:如果上层方法没有事务,则创建一个新的事务;如果已经存在事务,则将当前事务挂起。
NOT_SUPPORTED:如果上层方法没有事务,则以非事务方式执行;如果已经存在事务,则将当前事务挂起。
NEVER:如果上层方法没有事务,则以非事务方式执行;如果已经存在事务,则抛出异常。
MANDATORY:如果上层方法已经存在事务,则加入到事务中执行;如果不存在事务则抛出异常。
NESTED:如果上层方法没有事务,则创建一个新的事务;如果已经存在事务,则嵌套到当前事务中。
事务管理配置—XML配置
1 |
|
事务管理配置—注解配置
在applicationContext.xml中配置事务管理,声明使用注解方式进行事务配置
1
2
3
4
5
6
7
8
9
10
11<!--使用注解进行事务管理前提是 IoC需要进行注解配置-->
<context:annotation-config/>
<context:component-scan base-package="cc.gaojie"/>
<!--1.将Spring提供的事务管理配置配置给Spring容器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"/>
</bean>
<!--2.声明使用注解完成事务配置-->
<tx:annotation-driven transaction-manager="transactionManager"/>在需要Spring进行事务管理的方法上添加
@Transactional
注解1
2
3
4@Transactional(isolation = Isolation.REPEATABLE_READ ,propagation = Propagation.SUPPORTS )
public List<User> listUsers() {
return userDAO.queryUsers();
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!