问题:在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 static SessionFactory getSessionFactory() {
return sessionFactory;
} // 获取session对象
public static Session openSession() {
return sessionFactory.openSession();
} // 获取绑定到线程里面的session,如果获取不到就创建一个新的线程去绑定session.这里面要想session对象的生命周期与当前线程绑定,还需要在hibernate配置文件里面配置current_session_context_class属性,设置为thread
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();
} }

  

Hibernate工具类_抽取重复核心代码的更多相关文章

  1. iOS开发--换肤简单实现以及工具类的抽取

    一.根据美工提供的图片,可以有两种换肤的方案. <1>美工提供图片的类型一: <2>美工提供图片的类型二:这种分了文件夹文件名都一样的情况,拖入项目后最后用真实文件夹(蓝色文件 ...

  2. Hibernate.基础篇《一》.Hibernate工具类.

    Hibernate.基础篇<一>.Hibernate工具类. 话述: Hibernate.基础篇第一篇,前面是代码.后面再加理论&实践. Hibernate使用的版本是:5.x,在 ...

  3. 获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录

    获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录 ===========================获取全局上下文(getA ...

  4. hibernate工具类

    因为hibernate的代码大部分都是固定的,为了将减少重复的代码的书写,可以将这些代码封装为一个工具类,获取hibernate的session对象. 1.工具类: package pers.zhb. ...

  5. hibernate工具类HibernateUtil详解

    1.为什么要用hibernateUtil这个类,先看这段代码:     //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他      Con ...

  6. Hibernate 工具类

    1.HibernateConfigUtil.java(HIbernate配置工具类) import org.hibernate.Session; import org.hibernate.Sessio ...

  7. 【JDBC】工具类的抽取

    jdbc.properties属性文件 driverClass=com.mysql.jdbc.Driver url=jdbc:mysql:///jdbctest username=root passw ...

  8. Android开发之封装log打印日志的工具类,实用logutils详细代码

    public final class LogUtil { /** all Log print on-off */ private final static boolean all = true; /* ...

  9. Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

随机推荐

  1. Python_marshal模块操作二进制文件

    import marshal #导入模块 x1=30 #待序列化的对象 x2=5.0 x3=[1,2,3] x4=(4,5,6) x5={'a':1,'b':2,'c':3} x6={7,8,9} x ...

  2. java中Iterator和ListIterator的区别与联系

    首先,为什么需要使用迭代器Iterator,原有的for循环和for each不能满足需求吗? 那是因为Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来 ...

  3. Swift-函数学习

    函数:函数是独立的代码块,执行特定的任务. Swift 的统一函数语法足够灵活,能表达没有参数名称的简单的 C 型函数的任何东西,本地和外部复杂 Objective-C-style 方法参数名称为每个 ...

  4. linux ubuntukylin和deepin操作系统的比较及改进方向的建议

    研发中国的操作系统的需求在我看来是安全,还有就是自主.如果做的好还可以在创新上,使用体验上进行一波超越.现有的所谓的国产操作系统我了解的除了基于安卓的凤凰系统就是基于Linux的像优麒麟和deepin ...

  5. datePicker.js 应用

    var calendar2 = new datePicker();calendar.init({ 'trigger': '#datetime-picker-start', /*选择器,触发弹出插件*/ ...

  6. Re:从零开始的领域驱动设计

    领域驱动的火爆程度不用我赘述,但是即便其如此得耳熟能详,但大多数人对其的认识,还只是停留在知道它的缩写是DDD,知道它是一种软件思想,或者知道它和微服务有千丝万缕的关系.Eric Evans对DDD的 ...

  7. spring boot actuator专题

    spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的 ...

  8. jQuery学习之旅 Item3 属性操作与样式操作

    本节将Dom元素的操作:属性操作.样式操作.设置和获取HTML,文本和值.Css-Dom操作. 1.属性操作 <input type="text" name="us ...

  9. CSS简写总结

    CSS简写就是指将多行的CSS属性简写成一行,又称为CSS代码优化或CSS缩写.CSS 简写的最大好处就是能够显著减少CSS文件的大小,优化网站整体性能,更加容易阅读. 下面介绍常见的CSS简写规则: ...

  10. 7.app和app后端的通讯

    经常有开发者问:app和后端通讯是用http协议还是私有的协议?是用长连接还是短连接?通过阅读本文,帮你解除上面的疑问. (1)是用http协议还是私有的协议? 在间谍电视剧中,经常能看到间谍们的书信 ...