1、 将 Mybatis 的 DataSource (数据来源)的创建和管理交给 Spring Ioc 容器来做,并使用第三方数据库连接池来(Druid,C3P0等)取代 MyBatis 内置的数据库连接池
2、将 Mybatis 的 SqlSessionFactroy 交给 Spring Ioc 创建和管理,使用 spring-mybatis 整合jar包中提供的 SqlSessionFactoryBean 类代替项目中的 MyBatisUtil 工具类
3、将MyBatis的接口代理方式生成的实现类,交给Spring IoC容器创建并管理
创建 maven 项目,并在pom.xml 中整合如下依赖
注意:如果需要配置 Maven 静态资源过滤问题时,需要保证静态资源路径正确,否则扫描不到
单元测试:junit
mybatis 相关依赖
数据库相关依赖 (mysql、Oracle等)
第三方数据库连接池
Spring 相关依赖
aop 织入器
mybatis-spring 整合包【重点】
lombok 工具依赖
slf4j日志依赖
具体依赖如下所示:
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>compilescope>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.6version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.47version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.12version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.3.3version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>5.3.3version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.25version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.10version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>5.3.3version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.2version>
dependency>
dependencies>
创建实体类
@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
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sys.mapper.UserMapper" >
<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 缓存和 mapper.xml 的映射关系)
DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
settings>
<mappers>
<mapper resource="mapper/XXX.xml"/>
mappers>
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
配置 Spring 容器
1、将数据源以 Bean 的形式存储进 Ioc容器
2、配置 SessionFactory 的 Bean,并将数据源的 Bean 以及 MyBatis 配置文件的路径注入到 SessionFactory 的 Bean 中,
3、配置 mapper 接口的自动扫描
<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"/>
<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>
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sys.mapper"/>
bean>
beans>
@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);
}
}
测试结果,增删改查均通过