使用mybatis-config.xml文件构建SqlSessionFactory对象,从而获取SqlSession实例。
由于SqlSessionFactory应该采用单例模式 ,所以这里使用单例模式去构建它。
public class MybatisUtils {
private final static Class<MybatisUtils> LOCK = MybatisUtils.class;
//创建一个全局静态变量数据库工厂
private static SqlSessionFactory sqlSessionFactory;
private MybatisUtils(){}
public static SqlSessionFactory getSqlSessionFactory(){
synchronized (LOCK){ // 锁定当前类
if(sqlSessionFactory != null){
return sqlSessionFactory;
}
String resource = "mybatis-config.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e){
e.printStackTrace();
return null;
}
return sqlSessionFactory;
}
}
//获取sqlSession会话,也是使用静态方法,不需要实例化对象
public static SqlSession getSession(){
if(sqlSessionFactory == null){
getSqlSessionFactory();
}
return sqlSessionFactory.openSession();
}
}
- 构造器加入
private
关键字,使得其他代码不能通过new的方式来创建它。 - 使用
synchronized
关键字加锁,主要为了防止在多线程中多次实例化SqlSessionFactory对象,从而保证SqlSessionFactory的唯一性。 getSession()
方法的作用是创建SqlSession对象。