文章目录
- 一、Spring 整合 MyBatis 的关键点
- 二、Spring 整合 MyBatis 的步骤
- 2.1 创建 Maven 项目,并导入相关依赖
- 2.2 配置 Mybatis 部分
- 2.3 配置 Spring 部分
- 2.3 配置测试类
一、Spring 整合 MyBatis 的关键点
1、 将 Mybatis 的 DataSource (数据来源)的创建和管理交给 Spring Ioc 容器来做,并使用第三方数据库连接池来(Druid,C3P0等)取代 MyBatis 内置的数据库连接池
2、将 Mybatis 的 SqlSessionFactroy 交给 Spring Ioc 创建和管理,使用 spring-mybatis 整合jar包中提供的 SqlSessionFactoryBean 类代替项目中的 MyBatisUtil 工具类
3、将MyBatis的接口代理方式生成的实现类,交给Spring IoC容器创建并管理
二、Spring 整合 MyBatis 的步骤
2.1 创建 Maven 项目,并导入相关依赖
-
创建 maven 项目,并在pom.xml 中整合如下依赖
注意:如果需要配置 Maven 静态资源过滤问题时,需要保证静态资源路径正确,否则扫描不到-
单元测试:junit
-
mybatis 相关依赖
-
数据库相关依赖 (mysql、Oracle等)
-
第三方数据库连接池
-
Spring 相关依赖
-
aop 织入器
-
mybatis-spring 整合包【重点】
-
lombok 工具依赖
-
slf4j日志依赖
-
具体依赖如下所示:
<dependencies> <!-- Junit测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> <!-- MyBatis核心Jar包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- MySql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- Lombok工具 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <!-- Spring核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.3</version> </dependency> <!-- Spring-test测试 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.3.3</version> </dependency> <!-- slf4j日志包 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- druid阿里的数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <!-- Spring整合ORM --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.3.3</version> </dependency> <!-- Spring整合MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency> </dependencies>
-
-
2.2 配置 Mybatis 部分
-
创建实体类
@Data public class User { private String id; private String name; private String pwd; }
-
创建 Mapper 接口
public interface UserMapper { List<Users> getUsers(); int addUsers(Users users); int updateUser(Users users); int deleteUser(Users users); }
-
创建 Mapper 接口对应的 xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sys.mapper.UserMapper" > <!-- 开启MyBatis自带的二级缓存 --> <!--<cache size="1024" eviction="LRU" flushInterval="60000" readOnly="true"/>--> <select id="getUsers" resultType="com.sys.dto.Users"> select id,name,pwd from user </select> <insert id="addUsers" parameterType="com.sys.dto.Users"> insert into user (id,name,pwd) values (#{id},#{name},#{pwd}) </insert> <update id="updateUser" parameterType="com.sys.dto.Users"> update user set name = #{name} where id = #{id} </update> <delete id="deleteUser" parameterType="com.sys.dto.Users"> delete from user where id = #{id} </delete> </mapper>
-
配置数据源(之前学习 MyBatis 时候都是配置到xml中的,这次维护到 jdbc-config.properties 中,因为不使用 MyBatis 内置连接池,使用第三方数据连接池)
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=root
-
配置 mybatis-config.xml (配置 MyBatis 缓存)
<?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> <!-- 开启延迟加载 该项默认为false,即所有关联属性都会在初始化时加载 true表示延迟按需加载 --> <settings> <setting name="lazyLoadingEnabled" value="true"/> <!-- 开启二级缓存,这里注释了,不配置默认为一级缓存 --> <!-- <setting name="cacheEnabled" value="true"/> --> </settings> </configuration>
-
配置 log
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
2.3 配置 Spring 部分
-
配置 Spring 容器
-
1、将数据源以 Bean 的形式存储进 Ioc容器
2、配置 SessionFactory 的 Bean,并将数据源的 Bean 以及 MyBatis 配置文件的路径和 mapper.xml 的映射关系注入到 SessionFactory 的 Bean 中 。(注:SessionFactory :点进源码可以发现,这个类是 mybatis 的实体工具类,所有给属性命名时必须和 SessionFactory 中的属性保持一致)
3、配置 mapper 接口的自动扫描<?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" 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"> <!-- 加载数据库连接信息的属性文件 --> <context:property-placeholder location="classpath:jdbc-config.properties"/> <!-- 配置Druid数据源的Bean --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 配置SessionFactory的Bean --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据源 --> <property name="dataSource" ref="dataSource"/> <!-- 指定MyBatis配置文件的位置 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 配置 xml 的映射 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- 配置mapper接口的扫描器,将Mapper接口的实现类自动注入到IoC容器中 实现类Bean的名称默认为接口类名的首字母小写 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- basePackage属性指定自动扫描mapper接口所在的包 --> <property name="basePackage" value="com.sys.mapper"/> </bean> </beans>
-
2.3 配置测试类
-
@RunWith注解:
@RunWith 就是一个运行器
@RunWith(JUnit4.class) 就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class) ,就是一套测试集合,
@ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件 -
@ContextConfiguration注解:
@ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试,这里的用法是通过它来找到 Spring 的配置文件,通过配置文件找到数据源以及 mybatis 配置文件和 映射 mapper 接口等
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class Test_SpringMyBatis { @Autowired private UserMapper userMapper; @Test public void testFindUserList(){ Users users = new Users(); /*users.setId("4"); users.setName("姚青"); users.setPwd("123456"); int i = userMapper.addUsers(users);*/ /*users.setId("5"); users.setName("张三"); int i2 = userMapper.updateUser(users);*/ /*users.setId("6"); int i3 = userMapper.deleteUser(users);*/ List<Users> userList = userMapper.getUsers(); System.out.println(userList); } }
-
测试结果,增删改查均通过