1. 程式人生 > >MyBatisUtil.java.工具類,連線資料庫庫

MyBatisUtil.java.工具類,連線資料庫庫

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 }