每当,咱们须要单元测试单个Mapper时,都须要将全部的Spring bean都加载一遍,致使单元测试时间过长。浪费开发时间,因此写了个小demo。提高测试单个Mapper的测试速度。 代码以下:java
import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.core.io.ClassPathResource; import com.alibaba.druid.pool.DruidDataSource; /** * 测试Mapper时,尽可能继承该类。缘由加载速度快,不用额外再加载spring相关的内容 * * @author liurong * * @date 2019年1月10日 */ public abstract class BaseMapper<T> { public T getMapper(Class<T> mapperClass, String mapperXml) throws Exception { // 数据源注入 DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://192.168.32.138:3306/cumeeting?useUnicode=true&characterEncoding=UTF-8"); dataSource.setUsername("root"); dataSource.setPassword("123456"); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setInitialSize(10); dataSource.setMinIdle(5); dataSource.setMaxActive(10); SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis/mybatis_config.xml")); ClassPathResource classPathResource = new ClassPathResource("mybatis/mapper/" + mapperXml); ClassPathResource[] arr = { classPathResource }; sqlSessionFactoryBean.setMapperLocations(arr); sqlSessionFactoryBean.setDataSource(dataSource); // 初始化 sqlSessionFactoryBean.afterPropertiesSet(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); Configuration configuration = sqlSessionFactory.getConfiguration(); if (!configuration.hasMapper(mapperClass)) { configuration.addMapper(mapperClass); } T t = (T) configuration.getMapper(mapperClass, sqlSessionFactory.openSession()); return t; } }
实现类以下:mysql
import java.util.HashMap; import org.junit.Test; import com.alibaba.fastjson.JSON; import com.fastonz.boss.mapper.IAgentMapper; import com.fastonz.core.BaseMapper; public class AgentMapperTest extends BaseMapper<IAgentMapper> { @Test public void test1() { try { IAgentMapper mapper = super.getMapper(IAgentMapper.class, "AgentMapper.xml"); // 代用方法便可 } catch (Exception e) { e.printStackTrace(); } } }