首页 > 技术文章 > mybatis关于OpenSessionInview这个filter还有创建一个mybatis工具类

chyxOne 2018-11-06 11:05 原文

public class MybatisUtil {
    //factory实例化过程是一个非常耗费性能的过程
    //保证有且只有一个factory;
    private static SqlSessionFactory factory;
    private static ThreadLocal<SqlSession> tl = new ThreadLocal<>();
    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    //获取sqlsession方法
    public static SqlSession getSession() {
        SqlSession session = tl.get();
        if(session==null) {
            session = factory.openSession();
        }
        return session;
    }
    
    //关闭session
    public static void closeSession() {
        SqlSession session = tl.get();
        if(session!=null) {
            session.close();
        }
        tl.set(null);
    }
}

其中学习一个jdk的类 ThreadLocal 在当前线程中可以保存一个对象,大概用法:

ThreadLocal<Object> threadLocal = new ThreadLocal<>();
threadLocal.set();
threadLocal.get();

 

推荐阅读