`

Hibernate 4.X获取session

阅读更多
package cn.com.songjy.sh.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionFactory {
	private static Configuration configuration = null;
	private static SessionFactory sessionFactory = null;
	/*ServiceRegistry是Hibernate4.X新增接口,
	应用于Hibernate的配置或者服务等将统一向这个ServiceRegistry注册后才能生效。
	所以需要构建一个ServiceRegistry对象,将配置信息向它注册,然后Configuration对象根据从这个ServiceRegistry对象中获取配置信息生成SessionFactory。
	Hibernate4的配置入口不再是Configuration对象,而是ServiceRegistry对象,Configuration对象将通过ServiceRegistry对象获取配置信息。
	hibernate4 源码位置:org.hibernate.service.ServiceRegistryBuilder	具体可参看hibernate源码。以及API*/
	private static ServiceRegistry serviceRegistry = null;
	
	
	static {
		try {
			// 首先获取配置信息
			configuration =  new Configuration().configure();
			serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
			
			// 创建Session Factory			
			sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		} catch (HibernateException e) {
			// System.out.println("SessionFactory创建失败");
			e.printStackTrace();
		}
	}
	
	public static Session getSession() {
		Session session = null;
		if(null==session || false==session.isOpen()){
			session = sessionFactory.openSession();
		}
		
		return session;
	}
	
	public static void closeSession(Session session){
		try {
			if(null!=session && session.isOpen())
				session.close();
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}
}


package cn.com.songjy.sh.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionManager {
	
	private static Configuration configuration = null;
	private static SessionFactory sessionFactory = null;
	
	private static ServiceRegistry serviceRegistry = null;
	
	static {
		try {
			// 首先获取配置信息
			configuration =  new Configuration().configure();
			serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
			
			// 创建Session Factory			
			sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		} catch (HibernateException e) {
			// System.out.println("SessionFactory创建失败");
			e.printStackTrace();
		}
	}
	

	private static final ThreadLocal<Session> ThreadLocal_Session = new ThreadLocal<Session>();
	private static final ThreadLocal<Transaction> ThreadLocal_Transaction = new ThreadLocal<Transaction>();
	
	/**
	 * 获取当前线程中的Session
	 */
	public static Session getThreadLocalSession(){
		
		Session session =  ThreadLocal_Session.get();
		
		if(null == session || (false==session.isOpen())){
			session = sessionFactory.openSession();
			ThreadLocal_Session.set(session);
		}
		
		return session;
	}
	
	/**
	 * 启动或者加入当前线程中Session的Transaction
	 */
	public static Transaction getThreadLocalTransaction(){
		Transaction transaction = ThreadLocal_Transaction.get();
		if(null == transaction){
			transaction = getThreadLocalSession().beginTransaction();
			ThreadLocal_Transaction.set(transaction);
		}
			
		return transaction;
	}
	
	/**
	 * 提交当前线程中Session的Transaction
	 */
	public static void commitThreadLocalTransaction(){
		try {
			Transaction transaction = ThreadLocal_Transaction.get();
			if(null != transaction)
				transaction.commit();
//			ThreadLocal_Transaction.set(null);
			ThreadLocal_Transaction.remove();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 回滚当前线程中Session的Transaction事物
	 */
	public static void rollbackThreadLocalTransaction(){
		try {
			Transaction transaction = ThreadLocal_Transaction.get();
			if(null != transaction && transaction.isActive())
				transaction.rollback();
//			ThreadLocal_Transaction.set(null);
			ThreadLocal_Transaction.remove();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 关闭当前线程中的Session
	 */
	public static void closeThreadLocalSession(){
		Session session =  ThreadLocal_Session.get();
		
		try {
			if(null != session)
				if(true == session.isOpen())
					session.close();
		} catch (HibernateException e) {
			e.printStackTrace();
		}
//		ThreadLocal_Session.set(null);
		ThreadLocal_Session.remove();
	}
}
分享到:
评论

相关推荐

    hibernate4.x jar

    Hibernate 4.x 是一个流行的Java持久化框架,用于简化数据库操作和对象关系映射(ORM)。这个"hibernate4.x jar"包包含了 Hibernate 框架的核心组件和其他相关库,便于开发者在自己的项目中使用。它使得开发人员能够...

    Struts2.X+Hibernate3.X+Spring2.5 整合

    标题"Struts2.X+Hibernate3.X+Spring2.5 整合"指的是将这三个框架的特定版本(Struts2.X,Hibernate3.X,Spring2.5)集成到同一个项目中,实现高效的企业级应用开发。这种整合能够充分利用各个框架的优势,使开发者...

    Struts1.3+Spring4.x+Hibernate4.x框架整合实现对书籍的增删改查(含分页)

    Struts1.3、Spring4.x和Hibernate4.x是经典的Java Web开发框架组合,被称为SSH。这个项目展示了如何将这三个框架整合起来,实现一个完整的书籍管理应用,包括书籍的增加、删除、修改和查询功能,并且包含了分页展示...

    Hibernate 3.x 参考手册

    Transaction transaction = session.beginTransaction(); // 操作数据库 transaction.commit(); session.close(); ``` **1.2 第一个持久化类** - **定义持久化类:** - 实现序列化接口 `Serializable`。 - ...

    spring Spring MVC Hibernate 4.x 整合案例

    Hibernate 4.x版本在前一版本的基础上增加了更多优化和改进,如支持JPA 2.1规范、性能提升以及更好的数据库平台兼容性。 在这个整合案例中,我们将看到如何配置Spring、Spring MVC和Hibernate,以实现一个包含增删...

    hibernate3.x参考文档

    《Hibernate3.x参考文档》是针对Java开发人员的一份重要资料,它详尽地阐述了Hibernate3.x框架的各项功能和使用方法。Hibernate是一款强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互,使得...

    Hibernate3.x简单配置示例

    - **删除(Delete)**:调用`Session.delete()`方法删除数据库中的对象。 - **查询(Query)**:可以使用HQL(Hibernate Query Language)或Criteria API进行查询。 **单表简单映射** 在Hibernate中,单表映射...

    Hibernate3.x总结

    Transaction tran = this.session.beginTransaction(); // 开始事务 this.session.save(p); // 执行保存操作 tran.commit(); // 提交事务 this.session.close(); // 关闭 Session } ``` ##### 2. 删除数据 -...

    Struts2 2.3.15 + Hibernate 3.x.x + Spring 3.2.3整合JAR包

    同时,通过Hibernate的SessionFactory获取Session,进行数据操作。 7. **编写业务逻辑**:定义Action类,使用Spring注入Service,Service层再注入DAO,实现业务逻辑。 8. **测试**:通过编写JUnit测试或部署应用进行...

    Spring3.x_Struts2.x_Hibernate3.x整合

    Action执行业务逻辑,通过SessionFactory获取Session,执行数据库操作。完成后,Action返回结果,Struts2根据结果类型决定如何渲染视图。 SSH整合的优势在于,Spring的IOC和AOP特性可以使代码更松耦合,Struts2负责...

    官方原版hibernate-3.2.ga.zip

    Hibernate是一个开源的对象关系映射(ORM)框架,它在...因此,对于新项目,建议使用更现代的Hibernate版本,以获取更好的性能和特性。然而,对于已有的3.2.ga项目,维护和升级需要谨慎,以确保与现有代码的兼容性。

    hibernate-5.2.12.Final最新官方完整版(含源码实例等)

    1. 支持JPA 2.2规范:在5.2.x版本中,Hibernate对Java Persistence API(JPA)2.2进行了全面支持,包括新的注解和查询特性。 2. 性能优化:对查询缓存和二级缓存进行了改进,提升了数据访问速度。 3. 新的Type系统:...

    hibernate+ehcache jar包

    在Hibernate中,一级缓存是Session级别的,每个Session内部都会有一个缓存,用于存储当前Session中的对象;二级缓存则是SessionFactory级别的,它可以跨Session共享,大大提升了缓存的利用率。 整合步骤如下: - ...

    hibernate 3.1+tomcat 5.5.x(配置jndi)

    ### hibernate 3.1+tomcat 5.5.x(配置jndi) #### 一、引言 随着Tomcat从5.0版本升级到5.5.x版本,其配置发生了诸多变化,特别是对Tomcat JNDI的配置方式产生了显著的影响。这对希望在Hibernate安装中利用Tomcat ...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多个Session进行共享。 在Spring Boot项目中配置Redis作为Hibernate的二级缓存,我们需要以下步骤: 1. **添加依赖**: 首先,在`pom.xml`文件中...

    Hibernate 4——Hello World

    确保替换`4.x.y`为实际的Hibernate 4版本号。 ### 创建实体类 在Hibernate中,每个Java类都代表一个数据库表,类中的属性对应表中的列。例如,我们可以创建一个简单的`User`类: ```java import javax.persistence....

    hibernate基本配置要用到的包

    5. **DOM4J**: Hibernate使用DOM4J解析XML配置文件,所以`dom4j-x.x.x.jar`是必需的。 6. **EclipseLink JPA**: 如果你打算使用JPA(Java Persistence API),可能还需要`eclipselink-x.x.x.jar`,虽然Hibernate也...

    hibernate-release-5.0.12.Final.zip

    Hibernate 5.0.12.Final在5.x系列中是一个成熟的版本,后续版本将继续优化性能,增加新特性,如对Java 8特性的更好支持,以及对新数据库系统的兼容性增强。 总之,Hibernate 5.0.12.Final是Java开发中不可或缺的...

    hibernate-release-4.3.11.Final.zip

    5. 获取Session:通过SessionFactory创建Session实例,开始数据库操作。 6. CRUD操作:使用Session进行增删查改操作,如Session.save()、Session.get()等。 7. 提交事务:在事务范围内执行操作,并通过Transaction....

    hibernate-3.6.5.Final-dist.zip

    5. **Session**:通过SessionFactory获取Session,执行CRUD操作。 6. **事务处理**:在Session中进行事务管理,确保数据的一致性。 7. **查询语言**:使用HQL或Criteria API进行复杂查询。 ### 进阶学习 深入了解...

Global site tag (gtag.js) - Google Analytics