`

hibernate常用操作封装

阅读更多
hibernate常用操作封装
Java代码 复制代码
  1. package org.hibernate.auction.persistence;   
  2.   
  3. import net.sf.hibernate.*;   
  4. import net.sf.hibernate.cfg.Configuration;   
  5. import org.apache.commons.logging.*;   
  6. import org.hibernate.auction.exceptions.InfrastructureException;   
  7.   
  8. import javax.naming.*;   
  9.   
  10. /**  
  11.  * Basic Hibernate helper class, handles SessionFactory, Session and Transaction.  
  12.  * <p>  
  13.  * Uses a static initializer for the initial SessionFactory creation  
  14.  * and holds Session and Transactions in thread local variables. All  
  15.  * exceptions are wrapped in an unchecked InfrastructureException.  
  16.  *  
  17.  * @author christian@hibernate.org  
  18.  */  
  19. public class HibernateUtil {   
  20.   
  21.     private static Log log = LogFactory.getLog(HibernateUtil.class);   
  22.   
  23.     private static Configuration configuration;   
  24.     private static SessionFactory sessionFactory;   
  25.     private static final ThreadLocal threadSession = new ThreadLocal();   
  26.     private static final ThreadLocal threadTransaction = new ThreadLocal();   
  27.     private static final ThreadLocal threadInterceptor = new ThreadLocal();   
  28.   
  29.     // Create the initial SessionFactory from the default configuration files   
  30.     static {   
  31.         try {   
  32.             configuration = new Configuration();   
  33.             sessionFactory = configuration.configure().buildSessionFactory();   
  34.             // We could also let Hibernate bind it to JNDI:   
  35.             // configuration.configure().buildSessionFactory()   
  36.         } catch (Throwable ex) {   
  37.             // We have to catch Throwable, otherwise we will miss   
  38.             // NoClassDefFoundError and other subclasses of Error   
  39.             log.error("Building SessionFactory failed.", ex);   
  40.             throw new ExceptionInInitializerError(ex);   
  41.         }   
  42.     }   
  43.   
  44.     /**  
  45.      * Returns the SessionFactory used for this static class.  
  46.      *  
  47.      * @return SessionFactory  
  48.      */  
  49.     public static SessionFactory getSessionFactory() {   
  50.         /* Instead of a static variable, use JNDI:  
  51.         SessionFactory sessions = null;  
  52.         try {  
  53.             Context ctx = new InitialContext();  
  54.             String jndiName = "java:hibernate/HibernateFactory";  
  55.             sessions = (SessionFactory)ctx.lookup(jndiName);  
  56.         } catch (NamingException ex) {  
  57.             throw new InfrastructureException(ex);  
  58.         }  
  59.         return sessions;  
  60.         */  
  61.         return sessionFactory;   
  62.     }   
  63.   
  64.     /**  
  65.      * Returns the original Hibernate configuration.  
  66.      *  
  67.      * @return Configuration  
  68.      */  
  69.     public static Configuration getConfiguration() {   
  70.         return configuration;   
  71.     }   
  72.   
  73.     /**  
  74.      * Rebuild the SessionFactory with the static Configuration.  
  75.      *  
  76.      */  
  77.      public static void rebuildSessionFactory()   
  78.         throws InfrastructureException {   
  79.         synchronized(sessionFactory) {   
  80.             try {   
  81.                 sessionFactory = getConfiguration().buildSessionFactory();   
  82.             } catch (Exception ex) {   
  83.                 throw new InfrastructureException(ex);   
  84.             }   
  85.         }   
  86.      }   
  87.   
  88.     /**  
  89.      * Rebuild the SessionFactory with the given Hibernate Configuration.  
  90.      *  
  91.      * @param cfg  
  92.      */  
  93.      public static void rebuildSessionFactory(Configuration cfg)   
  94.         throws InfrastructureException {   
  95.         synchronized(sessionFactory) {   
  96.             try {   
  97.                 sessionFactory = cfg.buildSessionFactory();   
  98.                 configuration = cfg;   
  99.             } catch (Exception ex) {   
  100.                 throw new InfrastructureException(ex);   
  101.             }   
  102.         }   
  103.      }   
  104.   
  105.     /**  
  106.      * Retrieves the current Session local to the thread.  
  107.      * <p/>  
  108.      * If no Session is open, opens a new Session for the running thread.  
  109.      *  
  110.      * @return Session  
  111.      */  
  112.     public static Session getSession()   
  113.         throws InfrastructureException {   
  114.         Session s = (Session) threadSession.get();   
  115.         try {   
  116.             if (s == null) {   
  117.                 log.debug("Opening new Session for this thread.");   
  118.                 if (getInterceptor() != null) {   
  119.                     log.debug("Using interceptor: " + getInterceptor().getClass());   
  120.                     s = getSessionFactory().openSession(getInterceptor());   
  121.                 } else {   
  122.                     s = getSessionFactory().openSession();   
  123.                 }   
  124.                 threadSession.set(s);   
  125.             }   
  126.         } catch (HibernateException ex) {   
  127.             throw new InfrastructureException(ex);   
  128.         }   
  129.         return s;   
  130.     }   
  131.   
  132.     /**  
  133.      * Closes the Session local to the thread.  
  134.      */  
  135.     public static void closeSession()   
  136.         throws InfrastructureException {   
  137.         try {   
  138.             Session s = (Session) threadSession.get();   
  139.             threadSession.set(null);   
  140.             if (s != null && s.isOpen()) {   
  141.                 log.debug("Closing Session of this thread.");   
  142.                 s.close();   
  143.             }   
  144.         } catch (HibernateException ex) {   
  145.             throw new InfrastructureException(ex);   
  146.         }   
  147.     }   
  148.   
  149.     /**  
  150.      * Start a new database transaction.  
  151.      */  
  152.     public static void beginTransaction()   
  153.         throws InfrastructureException {   
  154.         Transaction tx = (Transaction) threadTransaction.get();   
  155.         try {   
  156.             if (tx == null) {   
  157.                 log.debug("Starting new database transaction in this thread.");   
  158.                 tx = getSession().beginTransaction();   
  159.                 threadTransaction.set(tx);   
  160.             }   
  161.         } catch (HibernateException ex) {   
  162.             throw new InfrastructureException(ex);   
  163.         }   
  164.     }   
  165.   
  166.     /**  
  167.      * Commit the database transaction.  
  168.      */  
  169.     public static void commitTransaction()   
  170.         throws InfrastructureException {   
  171.         Transaction tx = (Transaction) threadTransaction.get();   
  172.         try {   
  173.             if ( tx != null && !tx.wasCommitted()   
  174.                             && !tx.wasRolledBack() ) {   
  175.                 log.debug("Committing database transaction of this thread.");   
  176.                 tx.commit();   
  177.             }   
  178.             threadTransaction.set(null);   
  179.         } catch (HibernateException ex) {   
  180.             rollbackTransaction();   
  181.             throw new InfrastructureException(ex);   
  182.         }   
  183.     }   
  184.   
  185.     /**  
  186.      * Commit the database transaction.  
  187.      */  
  188.     public static void rollbackTransaction()   
  189.         throws InfrastructureException {   
  190.         Transaction tx = (Transaction) threadTransaction.get();   
  191.         try {   
  192.             threadTransaction.set(null);   
  193.             if ( tx != null && !tx.wasCommitted() && !tx.wasRolledBack() ) {   
  194.                 log.debug("Tyring to rollback database transaction of this thread.");   
  195.                 tx.rollback();   
  196.             }   
  197.         } catch (HibernateException ex) {   
  198.             throw new InfrastructureException(ex);   
  199.         } finally {   
  200.             closeSession();   
  201.         }   
  202.     }   
  203.   
  204.     /**  
  205.      * Reconnects a Hibernate Session to the current Thread.  
  206.      *  
  207.      * @param session The Hibernate Session to be reconnected.  
  208.      */  
  209.     public static void reconnect(Session session)   
  210.         throws InfrastructureException {   
  211.         try {   
  212.             session.reconnect();   
  213.             threadSession.set(session);   
  214.         } catch (HibernateException ex) {   
  215.             throw new InfrastructureException(ex);   
  216.         }   
  217.     }   
  218.   
  219.     /**  
  220.      * Disconnect and return Session from current Thread.  
  221.      *  
  222.      * @return Session the disconnected Session  
  223.      */  
  224.     public static Session disconnectSession()   
  225.         throws InfrastructureException {   
  226.   
  227.         Session session = getSession();   
  228.         try {   
  229.             threadSession.set(null);   
  230.             if (session.isConnected() && session.isOpen())   
  231.                 session.disconnect();   
  232.         } catch (HibernateException ex) {   
  233.             throw new InfrastructureException(ex);   
  234.         }   
  235.         return session;   
  236.     }   
  237.   
  238.     /**  
  239.      * Register a Hibernate interceptor with the current thread.  
  240.      * <p>  
  241.      * Every Session opened is opened with this interceptor after  
  242.      * registration. Has no effect if the current Session of the  
  243.      * thread is already open, effective on next close()/getSession().  
  244.      */  
  245.     public static void registerInterceptor(Interceptor interceptor) {   
  246.         threadInterceptor.set(interceptor);   
  247.     }   
  248.   
  249.     private static Interceptor getInterceptor() {   
  250.         Interceptor interceptor =   
  251.             (Interceptor) threadInterceptor.get();   
  252.         return interceptor;   
  253.     }   
  254.   
  255. }  
分享到:
评论

相关推荐

    Java封装hibernate操作数据库.rar

    本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...

    spring+springmvc+hibernate常用jar

    标题中的"spring+springmvc+hibernate常用jar"指的是在Java Web开发中,整合Spring框架、Spring MVC和Hibernate框架时所需的常用库文件。这些jar文件是构建基于这三大框架的应用程序的基础,允许开发者实现模型-视图...

    Hibernate使用指南

    Hibernate 是一款 ORM 框架(对象关系映射),它对 JDBC(数据库连接技术的简称)进行了轻量级的封装,使得 Java 程序员可以随心所欲的使用面向对象的编程思想来操作数据库。Hibernate 的作用:用面向对象的编程思想...

    Hibernate常用总结

    - 执行操作:通过 Session 对象执行 SQL 命令,例如使用 HQL(Hibernate Query Language)进行查询。 - 提交事务:完成一组操作后,提交事务确保数据持久化。 - 关闭 Session:操作完成后关闭 Session,释放资源...

    Hibernate入门案例源码

    - DAO(数据访问对象):封装了对数据库的增删改查操作,使用Session接口进行实际操作。 - Service层:业务逻辑处理,调用DAO进行数据处理,是应用的核心部分。 - 测试类:用于验证代码功能的正确性。 在Eclipse和...

    hibernate基础jar包

    Transaction则封装了数据库事务,确保数据操作的一致性和完整性。 7. HQL和Criteria API:Hibernate Query Language(HQL)是Hibernate特有的面向对象的查询语言,类似于SQL,但操作的是对象而非表格。Criteria API...

    .hibernate 框架介绍

    Hibernate框架在企业级应用中得到了广泛的应用,它封装了JDBC的细节,减轻了数据访问层的编码负担,并且支持多种数据库系统,具有良好的灵活性和扩展性。Hibernate支持1:1、1:n、n:m等多种关联映射关系,可以有效地...

    Hibernate常用配置

    ### Hibernate常用配置详解 #### 一、概述 Hibernate 是一款开放源代码的 ORM(对象关系映射)框架,它对 JDBC 进行了轻量级的封装,使得 Java 开发人员可以使用面向对象的方式来操作数据库。本文将详细介绍 ...

    hibernate的第一个例子

    3. **辅助类(Helper Classes)**:这可能是配置类,如HibernateUtil,负责创建SessionFactory,或者工具类,如DAO(Data Access Object),封装了对数据库的基本操作。这些类通常包含初始化Hibernate配置、打开/...

    spring hibernate ext项目

    2. 工具类和实用方法:可能提供了对Spring和Hibernate常用操作的封装,提高开发效率。 3. 模块化设计:可能将不同的功能模块化,便于代码重用和维护。 4. 性能优化:可能包含了针对Spring和Hibernate的性能调优策略...

    Java常用架包struts,hibernate等

    Hibernate提供了CRUD(创建、读取、更新、删除)操作的API,以及查询语言HQL(Hibernate Query Language)和Criteria API,方便进行复杂的数据查询。此外,Hibernate还支持事务管理和缓存机制,提升了应用程序的性能...

    封装了数据库访问操作

    最后,可能还会有查询结果的映射功能,如ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,将数据库查询的结果自动转化为Java对象,简化了数据操作的代码。 综上所述,"封装了数据库访问操作"是一个...

    ssh数据库基本操作封装

    在这个主题中,“ssh数据库基本操作封装”指的是将常用的数据库交互功能,如增删改查(CRUD),通过SSH框架进行封装,以便在项目中更方便地调用。这通常涉及到Spring的IoC(Inversion of Control)容器来管理数据库...

    hibernate源码分析

    **一、Hibernate常用API详解** 在Hibernate中,主要的API包括SessionFactory、Session、Transaction等。SessionFactory是线程安全的,负责创建Session实例。Session是与数据库交互的主要接口,提供了持久化对象的...

    Hibernate实践 DB操作

    在项目中为了方便地使用Hibernate,通常会创建一个`HibernateUtil`工具类来封装一些常用的功能。例如,创建`SessionFactory`实例、管理Session等。 - **2.4.1 SessionFactory的初始化** - 使用`SessionFactory`...

    Struts_Spring_Hibernate_CRUD操作案例_-分页查询

    Struts、Spring和Hibernate是Java开发中常用的三大框架,它们分别负责不同的职责:Struts作为MVC(模型-视图-控制器)框架处理请求和响应,Spring提供了依赖注入和事务管理,而Hibernate则是对象关系映射(ORM)框架...

    配置hibernate数据源

    通过Hibernate API进行增删改查操作,常用的方法包括session.save(), session.get(), session.update()和session.delete()。 6. 进行单元测试。在代码开发完成后,需要对Hibernate的配置和实体类的映射进行测试,...

    hibernate_first_new项目源码

    【hibernate_first_new项目源码】是一个关于Hibernate框架学习的项目,主要涵盖了对Hibernate常用接口的详细讲解和实例应用。Hibernate是一个强大的Java持久层框架,它为开发者提供了对象关系映射(ORM)功能,使得...

    Spring整合Hibernate.jar

    HibernateTemplate封装了一些常用的Hibernate操作,如save、update、delete、find等。 6. **注解驱动的实体类和映射**:Hibernate支持使用注解来定义实体类和数据库表之间的映射。例如,使用`@Entity`标记实体类,`...

    通用的hibernate查询

    【hibernate查询详解】 Hibernate,作为一款强大的Java对象...而分页查询是大数据量场景下的常用策略,Hibernate提供了简单的API来实现。理解并熟练掌握这些查询方式,将有助于我们在Java开发中更好地运用Hibernate。

Global site tag (gtag.js) - Google Analytics