自己写了工具类方便下次使用mybatis,写这个博客备忘。
package com.walle.studymybatis.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 用于启动Mybatis,获得Mybatis的相关入口
*/
public class SqlSessionFactoryUtil {
// 以环境id为key,SqlSessionFactory为键的map,便于根据环境id切换工厂
private static final Map<String, SqlSessionFactory> sqlSessionFactoryMap = new HashMap<String, SqlSessionFactory>();
// 类线程锁
private static final Class<SqlSessionFactoryUtil> CLASS_LOCK = SqlSessionFactoryUtil.class;
/**
* 私有化默认构造函数
*/
private SqlSessionFactoryUtil() {
}
/**
* 构建SqlSessionFactory
* environmentId为mybatis 全局配置文件的环境id,如<environment id="development">,传入""evelopment"
* @return
*/
public static SqlSessionFactory initSqlSessionFactory(String environmentId){
String resource = "mybatis/mybatis-conf.xml";//mybaiti全局配置文件的路径
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (Exception e) {
System.out.println("根据mybatis配置文件初始化失败");
}
// 为了避免并发状态下的SqlSessionFactory不唯一,需要添加锁
synchronized(CLASS_LOCK){
if(sqlSessionFactoryMap.get(environmentId) == null){
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,environmentId);
sqlSessionFactoryMap.put(environmentId, sqlSessionFactory);
}
}
return sqlSessionFactoryMap.get(environmentId);
}
/**
* 获得一个新的Session
* @return
*/
public static SqlSession openSession(String environmentId){
if(sqlSessionFactoryMap.get(environmentId) == null){
initSqlSessionFactory(environmentId);
}
return sqlSessionFactoryMap.get(environmentId).openSession();
}
}
使用示例
@Test
public void test01(){
SqlSession sqlSession = SqlSessionFactoryUtil.openSession("development");
TblEmployeeMapper mapper = sqlSession.getMapper(TblEmployeeMapper.class);
List<TblEmployee> list = mapper.selectByExample(null);
System.out.println(list.size());
}