当前位置: 移动技术网 > IT编程>开发语言>Java > Hibernate工具类_抽取重复核心代码

Hibernate工具类_抽取重复核心代码

2019年04月26日  | 移动技术网IT编程  | 我要评论

问题:在hibernate中每次执行一次操作总是需要加载核心配置文件,获取连接池等等都是重复动作,所以抽取出来

解决:

package com.xxx.utils;
/**
*hibernate的工具类
*@author cxh
*/

import org.hibernate.hibernateexception;
import org.hibernate.session;
import org.hibernate.sessionfactory;
import org.hibernate.cfg.configuration;

public class hiberutils {
//    1.创建一个session回话工厂,以单例模式管理(简单的获取session第一种)
    private static sessionfactory sessionfactory;
    
//    2.threadlocal存储session,一开始直接将session绑到当前线程,后面直接来获取线程中的session(第二种)
    private static threadlocal<session> currentsession = new threadlocal<session>(); 
    
    //初始化获取session会话工厂
    static {
        try {
            sessionfactory = new configuration().configure("hibernate.cfg.xml").buildsessionfactory();
        } catch (hibernateexception e){
            e.printstacktrace();
            throw new hibernateexception("初始化会话工厂失败");
        }
    }
    
//    获取单例会话工厂
    public sessionfactory getsessionfactory() {
        return sessionfactory;
    }
    
//    获取session对象
    public static session opensession() {
        return sessionfactory.opensession();
    }
    
//    获取绑定到线程里面的session,如果获取不到就创建一个新的线程去绑定session
    public session getcurrentthreadsession() {
//        获取线程中的session
        session s = currentsession.get();
        if(s == null) {
//            创建一个新的session
            s = sessionfactory.opensession();
//            将新的session与当前线程绑定
            currentsession.set(s);
        }
//        不为空,当前线程有session,直接返回
        return s;
    }
    
//    关闭当前线程的session
    public static void closecurrentthreadsession() {
//        获取当前线程绑定的session对象
        session s = currentsession.get();
//        当前线程有session对象,且该对象不为空,需要关闭
        if(s != null) {
            s.close();
        }
        currentsession.set(null);
    }
    
//    3.hibernate中底层已经帮你封装了将session与当前线程绑定的方法
    public static session getcurrentsession() {
        return sessionfactory.getcurrentsession();
    }
    
    //上面两种获取线程里面的session都可以直接调用该封装方法进行关闭
    public static void closesession() throws hibernateexception {
        sessionfactory.getcurrentsession().close();
    }
    
}

 

  

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网