可以在每一個項目里直接使用
1 package com.yh.mb.dao; 2 3 import java.io.Reader; 4 5 import org.apache.ibatis.io.Resources; 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 /** 10 * mybatis連接數據庫的工具類 11 * @author Administrator 12 * 13 */ 14 public class MyBatisUtil { 15 private MyBatisUtil(){ 16 } 17 private static final String RESOURCE = "mybatis-config.xml"; 18 private static SqlSessionFactory sqlSessionFactory = null; 19 private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); 20 static { 21 Reader reader = null; 22 try { 23 reader = Resources.getResourceAsReader(RESOURCE); 24 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 25 sqlSessionFactory = builder.build(reader); 26 } catch (Exception e1) { 27 e1.printStackTrace(); 28 throw new ExceptionInInitializerError("初始化MyBatis錯誤,請�?��配置文件或數據庫"); 29 30 } 31 } 32 public static SqlSessionFactory getSqlSessionFactory(){ 33 return sqlSessionFactory; 34 } 35 public static SqlSession getSession(){ 36 //sessionTL的get()方法根據當前線程返回其對應的線程內部變量�? 37 //也就是我們需要的Session,多線程情況下共享數據庫鏈接是不安全的�? 38 //ThreadLocal保證了每個線程都有自己的Session�? 39 SqlSession session = threadLocal.get(); 40 // 如果session為null,則打開�?��新的session 41 if (session == null){ 42 session = (sqlSessionFactory !=null) ?sqlSessionFactory.openSession():null; 43 threadLocal.set(session); // 5 44 } 45 return session; 46 } 47 public static void closeSession(){ 48 SqlSession session = (SqlSession) threadLocal.get(); // 2 49 threadLocal.set(null); 50 if (session !=null){ 51 session.close(); 52 } 53 } 54 }