package com.huawei.ssh.entity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Configuration configuration;
private static SessionFactory sessionFactory;
private static boolean useThreadLocal = true;
private static ThreadLocal threadSession = new ThreadLocal();
private static ThreadLocal threadTransaction = new ThreadLocal();
/**
* 获取配置文件
*/
static {
try {
// 创建Configuration对象
configuration = new Configuration();
// 读取hibernate.cfg.xml文件
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.out.println("init exception " + e);
}
}
/**
* @return SessionFactory
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* @return 获取当前session
*/
public static Session getCurrentSession() {
if (useThreadLocal) {
Session s = (Session) threadSession.get();
if (s == null) {
s = getSessionFactory().openSession();
threadSession.set(s);
}
return s;
} else {
return getSessionFactory().getCurrentSession();
}
}
/**
*关闭session对象
*/
public static void closeSession()
{
Session session = (Session)threadSession.get();
threadSession.set(null);
if(session!=null&&session.isOpen())
{
session.close();
}
}
/**
* 开始事务
*/
public static void beginTransaction()
{
Transaction tx = (Transaction)threadTransaction.get();
if(tx==null)
{
tx = getCurrentSession().beginTransaction();
threadTransaction.set(tx);
}
}
/**
* 提交事务
*/
public static void commitTransaction()
{
Transaction tx = (Transaction)threadTransaction.get();
try
{
if(tx!=null&&!tx.wasCommitted()&&!tx.wasRolledBack())
{
tx.commit();
}
threadTransaction.set(null);
}catch(Exception ex)
{
rollbackTransaction();
System.out.println("回滚 "+ex);
}
}
/**
* 回滚事务
*/
public static void rollbackTransaction()
{
Transaction tx = (Transaction)threadTransaction.get();
try
{
threadTransaction.set(null);
if(tx!=null&&!tx.wasCommitted()&&!tx.wasRolledBack())
{
tx.rollback();
}
}catch(Exception ex)
{
System.out.println("Rollback exception "+ex);
}finally
{
closeSession();
}
}
}
分享到:
相关推荐
1. **配置与初始化**:Hibernate的配置通常通过`hibernate.cfg.xml`文件完成,包括数据库连接信息、方言设置、缓存配置等。初始化时,会创建SessionFactory,它是线程安全的,负责创建Session实例。 2. **Session**...
### Hiernate课件知识点详述 #### 一、Hibernate简介 **1.1 什么是Hibernate?** Hibernate是一个开源框架,能够自动地根据XML完成对象关系映射(ORM),并将对象持久化到数据库中。它是连接Java应用程序和关系...
2. **配置Hibernate**:编写Hibernate的配置文件(如hibernate.cfg.xml),指定数据库连接信息,加载映射文件(hbm.xml)以定义实体类和数据库表之间的映射。 3. **整合XFire与Spring**:通过Spring的Bean配置,将...
Spring框架是整个系统的核心,它负责管理和协调各个组件,包括数据库连接、事务管理以及对其他框架如Struts2、Hibernate的整合。Spring的AOP(面向切面编程)特性允许我们定义全局的事务策略,确保数据的一致性。...
这些文件是SSH整合的关键,它们定义了各个组件如何协作,如Action如何注入服务,Hibernate如何连接数据库,以及Spring如何管理所有bean。 为了更好地理解和使用这个项目,你需要熟悉SSH的配置、生命周期管理、以及...
- **Model层**:实体对象类(如`Shenhe`)和映射配置文件(如`Shenhe.hbm.xml`)位于`com.hiernate.persistence`包中。公共操作类(如数据库操作和业务功能方法)位于`com.hiernate.util`包下,包括`GetHibernate`...
下,`GetHibernate`类负责初始化数据库连接,而`HibernateUtil`类则实现了各个模块的业务操作方法,包括发布申请的新增方法`saveShenhe(Shenhe shenhe)`。 **发布申请录入功能的详细设计逻辑:** - **界面层(fa....
- Hibernate的公用操作类如GetHibernate和HibernateUtil放在com.hiernate.util目录下,负责数据库连接初始化和业务逻辑操作。 个人计划模块的设计充分考虑了易用性和可维护性,通过分离视图、控制和模型,提高了...
- 创建实体类:定义代表数据库表的Java类。 - 编写映射文件:使用XML文件描述实体类与数据库表之间的映射关系。 - 实现业务逻辑:利用Hibernate API进行数据的增删改查操作。 #### 配置文件 - **用途**:定义...
在“hibernate+spring教程”中,你将学习如何配置Hibernate和Spring,创建数据库连接,定义实体类,编写映射文件,以及如何在Spring中配置SessionFactory和事务管理器。此外,教程还将展示如何在Spring的控制层(如@...