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();
    }

}

  

原文地址:https://www.cnblogs.com/ends-earth/p/10762270.html

时间: 2024-09-27 16:43:33

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

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

一.根据美工提供的图片,可以有两种换肤的方案. <1>美工提供图片的类型一: <2>美工提供图片的类型二:这种分了文件夹文件名都一样的情况,拖入项目后最后用真实文件夹(蓝色文件夹).因为项目中的黄色文件夹都是虚拟不存在的,同名的文件只会保留一个 勾选第二个: 二.工具类的抽取 -- 以第二种图片的方案为前提,抽取的工具类 头文件的实现                                                                          

dljd_011_jdbc再次封装工具类_把数据库的相关信息写到配置文件中,减低代码的耦合度

一.将连接数据库所需的相关信息写入到配置文件.通过读取配置文件来获取数据库的相关信息 package edu.aeon.aeonutils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import

JDBC的工具类的抽取

1.1.1 抽取一个JDBC的工具类因为传统JDBC的开发,注册驱动,获得连接,释放资源这些代码都是重复编写的.所以可以将重复的代码提取到一个类中来完成. /** * JDBC的工具类 * @author jt * */ public class JDBCUtils { private static final String driverClassName; private static final String url; private static final String username

hibernate工具类HibernateUtil详解

1.为什么要用hibernateUtil这个类,先看这段代码:  //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他      Configuration config = new Configuration();      config.config();      //创建工厂      SessionFactory factory = config.bulidSessionFactory();      //得到session  

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

===========================获取全局上下文(getApplicationContext)======================== 1.在com.example.autologin.myapplication包中创建Myapplication extends Application 代码: 1 public class Myapplication extends Application 2 { 3 private static Context context; 4

j2ee之hibernate工具类

package com.newtouch.utils; import org.hibernate.*;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import org.springframework.stereotype.Component; import java.io.Ser

一个工具类,生成一些废代码,用于混淆

发布多个微信小游戏,因为用的游戏框架是同一个,被微信判定代码雷同不给过审核. 于是加了点废代码.不知道能不能过哦.如果是人工审核,那基本没戏... 工具类 /** * 生成一些废代码,用于混淆 * @author chenkai 2018/10/7 */ class ConfuseTool { public constructor() { } public static createClass(num:number){ let str = ""; for(let i=0;i<nu

【JDBC】工具类的抽取

jdbc.properties属性文件 driverClass=com.mysql.jdbc.Driver url=jdbc:mysql:///jdbctest username=root password=1234 JDBCUtils.java工具类 package com.imooc.jdbc.utils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import ja

hibernate 配置文件 和一个 id生成类BaseEntity.java 和一个hibernate工具类 HibernatUtils.java

package com; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.entity.Food;