工具類 - MyBatisSQL會話:SqlSessionUtils
阿新 • • 發佈:2020-12-05
工具類 - MyBatisSQL會話:SqlSessionUtils
package com.itheima.utils; 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; import java.io.InputStream; /** * 會話工具類 */ public class SqlSessionUtils { private static SqlSessionFactory factory; private static ThreadLocal<SqlSession> localSessions = new ThreadLocal<SqlSession>(); static { //例項化工廠建造類 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //讀取核心配置檔案 try (InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml")) { //建立工廠物件 factory = builder.build(inputStream); } catch (IOException e) { e.printStackTrace(); } } /** * 得到會話物件 * @return 會話物件 */ public static SqlSession getSession() { //從容器中得到會話 SqlSession session = localSessions.get(); //如果會話為空,則從工廠中建立會話,並且放入容器中 if (session == null) { session = factory.openSession(); localSessions.set(session); } return session; } /** * 得到工廠物件 * @return 會話工廠物件 */ public static SqlSessionFactory getSqlSessionFactory() { return factory; } /** * 關閉會話 */ public static void closeSession() { //從容器中得到會話 SqlSession session = localSessions.get(); //如果會話不會為空,則關閉會話,並且從容器中刪除會話物件 if (session != null) { session.close(); localSessions.remove(); } } }