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();
}
}
分享到:
相关推荐
Hibernate 4.x 是一个流行的Java持久化框架,用于简化数据库操作和对象关系映射(ORM)。这个"hibernate4.x jar"包包含了 Hibernate 框架的核心组件和其他相关库,便于开发者在自己的项目中使用。它使得开发人员能够...
标题"Struts2.X+Hibernate3.X+Spring2.5 整合"指的是将这三个框架的特定版本(Struts2.X,Hibernate3.X,Spring2.5)集成到同一个项目中,实现高效的企业级应用开发。这种整合能够充分利用各个框架的优势,使开发者...
Struts1.3、Spring4.x和Hibernate4.x是经典的Java Web开发框架组合,被称为SSH。这个项目展示了如何将这三个框架整合起来,实现一个完整的书籍管理应用,包括书籍的增加、删除、修改和查询功能,并且包含了分页展示...
Transaction transaction = session.beginTransaction(); // 操作数据库 transaction.commit(); session.close(); ``` **1.2 第一个持久化类** - **定义持久化类:** - 实现序列化接口 `Serializable`。 - ...
Hibernate 4.x版本在前一版本的基础上增加了更多优化和改进,如支持JPA 2.1规范、性能提升以及更好的数据库平台兼容性。 在这个整合案例中,我们将看到如何配置Spring、Spring MVC和Hibernate,以实现一个包含增删...
《Hibernate3.x参考文档》是针对Java开发人员的一份重要资料,它详尽地阐述了Hibernate3.x框架的各项功能和使用方法。Hibernate是一款强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互,使得...
- **删除(Delete)**:调用`Session.delete()`方法删除数据库中的对象。 - **查询(Query)**:可以使用HQL(Hibernate Query Language)或Criteria API进行查询。 **单表简单映射** 在Hibernate中,单表映射...
Transaction tran = this.session.beginTransaction(); // 开始事务 this.session.save(p); // 执行保存操作 tran.commit(); // 提交事务 this.session.close(); // 关闭 Session } ``` ##### 2. 删除数据 -...
同时,通过Hibernate的SessionFactory获取Session,进行数据操作。 7. **编写业务逻辑**:定义Action类,使用Spring注入Service,Service层再注入DAO,实现业务逻辑。 8. **测试**:通过编写JUnit测试或部署应用进行...
Action执行业务逻辑,通过SessionFactory获取Session,执行数据库操作。完成后,Action返回结果,Struts2根据结果类型决定如何渲染视图。 SSH整合的优势在于,Spring的IOC和AOP特性可以使代码更松耦合,Struts2负责...
Hibernate是一个开源的对象关系映射(ORM)框架,它在...因此,对于新项目,建议使用更现代的Hibernate版本,以获取更好的性能和特性。然而,对于已有的3.2.ga项目,维护和升级需要谨慎,以确保与现有代码的兼容性。
1. 支持JPA 2.2规范:在5.2.x版本中,Hibernate对Java Persistence API(JPA)2.2进行了全面支持,包括新的注解和查询特性。 2. 性能优化:对查询缓存和二级缓存进行了改进,提升了数据访问速度。 3. 新的Type系统:...
在Hibernate中,一级缓存是Session级别的,每个Session内部都会有一个缓存,用于存储当前Session中的对象;二级缓存则是SessionFactory级别的,它可以跨Session共享,大大提升了缓存的利用率。 整合步骤如下: - ...
### hibernate 3.1+tomcat 5.5.x(配置jndi) #### 一、引言 随着Tomcat从5.0版本升级到5.5.x版本,其配置发生了诸多变化,特别是对Tomcat JNDI的配置方式产生了显著的影响。这对希望在Hibernate安装中利用Tomcat ...
通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多个Session进行共享。 在Spring Boot项目中配置Redis作为Hibernate的二级缓存,我们需要以下步骤: 1. **添加依赖**: 首先,在`pom.xml`文件中...
确保替换`4.x.y`为实际的Hibernate 4版本号。 ### 创建实体类 在Hibernate中,每个Java类都代表一个数据库表,类中的属性对应表中的列。例如,我们可以创建一个简单的`User`类: ```java import javax.persistence....
5. **DOM4J**: Hibernate使用DOM4J解析XML配置文件,所以`dom4j-x.x.x.jar`是必需的。 6. **EclipseLink JPA**: 如果你打算使用JPA(Java Persistence API),可能还需要`eclipselink-x.x.x.jar`,虽然Hibernate也...
Hibernate 5.0.12.Final在5.x系列中是一个成熟的版本,后续版本将继续优化性能,增加新特性,如对Java 8特性的更好支持,以及对新数据库系统的兼容性增强。 总之,Hibernate 5.0.12.Final是Java开发中不可或缺的...
5. 获取Session:通过SessionFactory创建Session实例,开始数据库操作。 6. CRUD操作:使用Session进行增删查改操作,如Session.save()、Session.get()等。 7. 提交事务:在事务范围内执行操作,并通过Transaction....
5. **Session**:通过SessionFactory获取Session,执行CRUD操作。 6. **事务处理**:在Session中进行事务管理,确保数据的一致性。 7. **查询语言**:使用HQL或Criteria API进行复杂查询。 ### 进阶学习 深入了解...