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();