关于DaoFactory中SqlSession的疑问
来源:2-6 Dao工厂
Wonwayshon
2021-02-05 10:59:02
注意到DaoFactory中的SqlSession不是全局唯一的并且没有关闭,这里SqlSession为什么不像SqlSessionFactory一样设置成static的熟悉然后全局唯一呢?麻烦老师详细讲解一下。
package com.imooc.icake.global;
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.IOException;
public class DaoFactory {
private static DaoFactory daoFactory;
private static SqlSessionFactory sqlSessionFactory;
private DaoFactory(){
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
try {
sqlSessionFactory=sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("/mybatis.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static DaoFactory newInstance(){
if(daoFactory==null){
daoFactory=new DaoFactory();
}
return daoFactory;
}
public <T> T getDao(Class<T> tClass){
SqlSession sqlSession=sqlSessionFactory.openSession(true);
return sqlSession.getMapper(tClass);
}
}
1回答
同学你好,sqlSession是通过sqlSessionFactory产生的,sqlSessionFactory相当于一个工厂,可以用很多个sqlSession工人,所以SQLSession不会设置为单例的。sqlSession不需要手动关闭,Mybatis底层会对其进行管理。
祝学习愉快~
相似问题
回答 1
回答 1