Hibernate工具类_抽取重复核心代码
程序员文章站
2022-07-02 16:42:56
问题:在Hibernate中每次执行一次操作总是需要加载核心配置文件,获取连接池等等都是重复动作,所以抽取出来 解决: ......
问题:在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(); } }
上一篇: WebService学习-第一弹
下一篇: Windows10快捷键