每当,我们需要单元测试单个Mapper时,都需要将所有的Spring bean都加载一遍,导致单元测试时间过长。浪费开发时间,所以写了个小demo。提升测试单个Mapper的测试速度。 代码如下:
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;
}
}
实现类如下:
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();
}
}
}