zoukankan      html  css  js  c++  java
  • HibernateSessionFactory建立-使用ThreadLocal

    立即加载还是延迟加载必须要连接数据库的,而在Java中连接数据库是依赖java.sql.Connection,在hibernate中session就是Connection的一层高级封装,一个session对应了一个Connection,要实现延迟加载必须有session才行.而且要进行延迟加载还必须保证是同一个session才行,用另外一个session去延迟加载前一个session的代理对象是不行的.大家都知道Connection是使用过后必须要进行关闭的,那么我们如何保证一次http请求过程中,一直都使用一个session呢,即一个Connection呢.而且还要保证http请求结束后正确的关闭.

    好,现在我们知道了我们要解决的问题

    1.如何保证http请求结束后正确的关闭session

    2.如何保证http请求过程中一直使用同一个session

     1 package util;
     2 
     3 import java.io.Serializable;
     4 
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import org.hibernate.cfg.Configuration;
     8 
     9 public class HibernateSessionFactory implements Serializable{
    10     private static final String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    11     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    12     private  static Configuration configuration = new Configuration();    
    13     private static SessionFactory sessionFactory=null;
    14     private static String configFile = CONFIG_FILE_LOCATION;
    15     //static代码块只会在实例化类的时候只执行一次
    16     static{
    17         try {
    18             configuration.configure(configFile);
    19             sessionFactory = configuration.buildSessionFactory();
    20         } catch (Exception e) {
    21             System.err.println("%%%% Error Creating SessionFactory %%%%");
    22             e.printStackTrace();
    23         }
    24         
    25     }
    26     //获取Session
    27     public static Session getCurrentSession(){
    28         Session session =  threadLocal.get();
    29         //判断Session是否为空,如果为空,将创建一个session,并付给线程变量tLocalsess
    30         try {
    31             if(session ==null&&!session.isOpen()){
    32                 if(sessionFactory==null){
    33                     rbuildSessionFactory();
    34                 }else{
    35                     session = sessionFactory.openSession();
    36                 }
    37                 //session = (sessionFactory != null) ? sessionFactory.openSession(): null;
    38             }
    39             threadLocal.set(session);
    40         } catch (Exception e) {
    41             // TODO: handle exception
    42         }
    43         
    44         return session;
    45     }
    46     
    47     public static void rbuildSessionFactory(){
    48         try {
    49             configuration.configure(configFile);
    50             sessionFactory = configuration.buildSessionFactory();
    51         } catch (Exception e) {
    52             System.err.println("%%%% Error Creating SessionFactory %%%%");
    53             e.printStackTrace();
    54         }
    55     }
    56 }
  • 相关阅读:
    KNN算法实现手写数字
    python 实现简单的KNN算法
    python实现简单的梯度下降法
    ubuntu中使用apt-get install 安装的软件的一些目录所在地
    机器学习解决问题的框架
    机器学习算法分类
    用asyncio的异步网络连接来获取sina、sohu和163的网站首页
    最简单的flask表单登录
    [USACO 6.5.4]The Clocks
    [USACO 6.5.3]Betsy's Tour
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/6042563.html
Copyright © 2011-2022 走看看