package com.jyk.mybatis.util; import java.io.IOException; import java.io.Reader; import java.sql.Connection; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /* * MyBatis工具類 */ public class MyBatisUtil { private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); private static SqlSessionFactory sqlSessionFactory; //靜態塊加載src目錄下的mybatis配置文件 static{ try { Reader reader = Resources.getResourceAsReader("mybatis.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } /* * 禁止外界通過new方法創建 */ private MyBatisUtil(){} /* * 獲取sqlsession */ public static SqlSession getSqlSession() { //從當前線程中獲取sqlSession對象 SqlSession sqlSession = threadLocal.get(); //判斷SqlSession對象是否為空 if(sqlSession==null) { //在SqlSessionFactory對象非空的情況下,獲取SqlSession對象 sqlSession = sqlSessionFactory.openSession(); //將SqlSession對象與當前線程綁定在一起 threadLocal.set(sqlSession); } return sqlSession; } /* * 關閉sqlsession與當前線程分開 */ public static void closeSqlSession() { //從當前線程中獲取SqlSession對象 SqlSession sqlSession = threadLocal.get(); if(sqlSession != null) { //關閉SqlSession對象 sqlSession.close(); //分開當前線程與SqlSession對象的關系,目的是盡早進行垃圾回收 threadLocal.remove(); } } /* * 測試方法 */ public static void main(String[] args) { Connection conn = MyBatisUtil.getSqlSession().getConnection(); if(conn==null) { System.out.println("連接為空"); } else { System.out.println("連接不為空"); } } }