问题:在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. vue实现双向数据绑定的原理

    vue实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的. 在MDN上对该方法的说明是:O ...

  2. day12 EL 表达式和国际化开发

    day12 EL 表达式和国际化开发 1. EL(Expression Language) 表达式简介 1.1 执行运算 1.2 获取web开发常用对象(el 中定义了11个隐式对象) 1.3 使用 ...

  3. SpringMVC中的异常处理

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1. 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeExc ...

  4. 谈谈对Javascript构造函数和原型对象的理解

    对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!).   常用的几种对象创 ...

  5. Sequel自动生成Select语句

    Sequel 是 Mac 上的一款不错的 mysql 可视化编辑, 它有一个非常好的功能是可以定制自己的插件, 这就是Bundles. 利用这个功能可以写出自己常用的一些sql. 查询语句是最常用的, ...

  6. 阅读GIC-500 Technical Reference Manual笔记

    GIC-500是ARM GICv3的一个实现,它只支持ARMv8核和实现了GIC Stream协议的GIC CPU Interface,比如Cortex-A53. 关于GIC有四份相关文档:<C ...

  7. Spring Boot 定制URL匹配规则的方法

    事情的起源:有人问我,说编写了一个/hello访问路径,但是吧,不管是输入/hello还是/hello.html,还是/hello.xxx都能进行访问.当时我还以为他对代码进行处理了,后来发现不是,后 ...

  8. poj 1696 极角排序求最长逆时针螺旋线

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4970   Accepted: 3100 Descrip ...

  9. 关于多条数据转为json格式单次传输的问题 2017.05.27

    数据形式如下: var mycars = [];//定义数组存放多条数据 for(var i=0;i<2;i++){ var jsonData = {};//定义变量存放单条数据 jsonDat ...

  10. 下载恒星源码使用vs2015运行配置

    需要安装PostgreSQL 配置安装路径下的include 项目 右键→属性 在启动项目项目中配置 右键→属性→展开连接器→输入