package com.cns.certservice.dao.impl; import org.apache.log4j.Logger; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import com.cns.certservice.exception.DAOException; public class HibernateTemplate { private HibernateTemplate() { } /** * static final session factory */ private static SessionFactory sessionFactory = null; /** * local thread variable used for storing share session instance */ private static final ThreadLocal localSession = new ThreadLocal(); /** * log4j logger */ private static final Logger logger = Logger .getLogger(HibernateTemplate.class); /** * use JTA transaction */ /** * 该工具唯一实例。 */ private static HibernateTemplate instance = null; private static Transaction tx = null; private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final Configuration cfg = new Configuration(); /** Holds a single instance of Session */ private static final ThreadLocal threadLocal = new ThreadLocal(); /** * 获取持久工具的唯一实例,以后不是使用单实例模式,而不是采用对象池支持。 * @return PersistentTool * @throws BaseException */ public synchronized static HibernateTemplate getInstance() { if (instance == null) { instance = new HibernateTemplate(); instance.initHibernate(); } return instance; } /** * 实现Hibernate的初始化配置环境。 */ public void initHibernate() { try { //此处从系统路径中获取配置文件 cfg.configure(CONFIG_FILE_LOCATION); } catch (HibernateException ex) { ex.printStackTrace(); } try { // 装载配置,构造SessionFactory对象 sessionFactory = cfg.buildSessionFactory(); } catch (HibernateException e) { e.printStackTrace(); } } /** * Get the share session * @ * @return Session share session */ public Session getSession() { logger.debug("Now enter into getSession method of DaoUtil"); //obtain share session Session session = (Session) localSession.get(); try { if (session == null||!session.isOpen()) { //get session by session factory session = sessionFactory.openSession(); localSession.set(session); } } catch (HibernateException ex) { ex.printStackTrace(); } return session; } /** * Close share session * @ */ public void close() { logger.debug("Now enter into closeSessionl"); //obtain share session Session session = (Session) localSession.get(); localSession.set(null); if (session != null) { try { session.flush(); session.close(); } catch (HibernateException ex) { ex.printStackTrace(); } } } /** * Begin JTA transaction * @ */ public void beginTransaction() { logger.debug("Now enter into beginTransaction"); try { Session session = (Session) localSession.get(); tx = session.beginTransaction(); } catch (Exception ex) { ex.printStackTrace(); } } /** * Commit transaction * @ */ public void commitTransaction() { try { tx.commit(); } catch (Exception ex) { ex.printStackTrace(); } } /** * Rollback transaction when breaching ACID operation * @ */ public void rollbackTransaction() { try { tx.rollback(); } catch (Exception ex) { ex.printStackTrace(); } } /** * Insert a record into table * @param obj Object * @throws DAOException * @ */ public int insertObject(Object obj) throws DAOException { int res = 0; logger.debug("Now enter into insertObject"); //obtain current share session try { Session session = HibernateTemplate.getInstance().getSession(); beginTransaction(); Object robj = session.save(obj); if (robj instanceof Integer) { res = (Integer) robj; } if (robj instanceof String) { res =1; } session.flush(); } catch (HibernateException ex) { rollbackTransaction(); logger.error("insertObject error:", ex); throw new DAOException(ex); } finally { commitTransaction(); close(); } return res; } /** * Delete a record of database table by Hibernate po object * @param obj Object * @throws DAOException * @ */ public boolean deleteObject(Object obj) throws DAOException { boolean res = false; logger.debug("Now enter into deleteObject method"); //obtain current share session try { Session session = HibernateTemplate.getInstance().getSession(); beginTransaction(); session.delete(obj); session.flush(); res = true; } catch (HibernateException ex) { rollbackTransaction(); logger.error("deleteObject error:", ex); throw new DAOException(ex); } finally { commitTransaction(); close(); } return res; } /** * Update a record of database table * @param ob Object * @throws DAOException * @ */ public boolean updateObject(Object ob) throws DAOException { boolean res = false; logger.debug("Now enter into updateObject"); //obtain current share session try { Session session = HibernateTemplate.getInstance().getSession(); beginTransaction(); session.update(ob); session.flush(); res= true; } catch (HibernateException ex) { rollbackTransaction(); logger.error("updateObject error:", ex); throw new DAOException(ex); } finally { commitTransaction(); close(); } return res; } }
相关推荐
通过`HibernateTemplate`,开发者可以非常方便地进行数据的增删改查等基本操作,而无需关心Hibernate Session的开启、关闭及事务管理等问题。本文将详细介绍`HibernateTemplate`的一些常用方法及其应用场景。 #### ...
在这个框架中,HibernateTemplate是Spring提供的一个工具类,它简化了Hibernate的使用,使得开发者可以更方便地进行数据库操作,如增删改查。接下来,我们将深入探讨如何在SSH2中使用HibernateTemplate进行这些基本...
hibernateTemplate常用方法.htm
HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...
### HibernateTemplate 的方法使用 #### 一、简介与配置方式 **HibernateTemplate** 是 Spring 框架中用于简化 Hibernate 使用的一个工具类。它通过 AOP(面向切面编程)的思想,封装了大量的 CRUD(创建、读取、...
下面是一个使用`HibernateTemplate`的DAO实现类的示例代码,该类实现了`PersonDAO`接口,包含了基本的增删改查操作。 ```java public class PersonDAOHibernate implements PersonDAO { // 使用log4j记录日志 ...
在HibernateTemplate中,提供了多种常用的方法来实现数据访问操作(CRUD): 1. **`void delete(Object entity)`**:用于删除一个指定的对象实例。例如,如果要删除一个`Person`对象,可以直接调用此方法。 2. **`...
在这个例子中,`PersonDAOImpl`通过setter方法接收SessionFactory,并初始化HibernateTemplate。`getPersons()`方法使用`find`方法获取所有Person对象,而`getPerson`方法则根据主键获取特定的Person实例。 除了...
`HibernateTemplate`通过其核心方法`execute`支持Hibernate访问代码的实现,该方法接受一个实现了`HibernateCallback`接口的匿名内部类或Lambda表达式。 #### 二、类结构与继承关系 `HibernateTemplate`类本身并...
在Spring框架中,`HibernateTemplate`作为ORM(Object Relational Mapping)技术中的一个重要组件,它提供了简化Hibernate操作的方法集,使得开发人员能够更加便捷地进行数据库操作。通过使用`HibernateTemplate`,...
HibernateTemplate的简单示例
对于批量删除数据,`HibernateTemplate`提供了`bulkUpdate()`方法,该方法通过执行SQL语句或HQL(Hibernate查询语言)来高效地处理大量数据的删除操作,避免了逐条删除所带来的性能瓶颈。 ### 批量删除操作详解 在...
### 关于使用HibernateTemplate #### 一、简介与背景 在Java企业级应用开发中,持久层技术扮演着至关重要的角色。其中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,极大地简化了数据访问层的...
`HibernateTemplate`中最常用的方法之一是`execute`方法,该方法接收一个`HibernateCallback`接口的实现作为参数。`HibernateCallback`是一个功能性接口,包含一个方法`doInHibernate`,开发者可以在该方法中编写...
- `hibernateTemplate.execute()`方法用于执行自定义的Hibernate操作。这里传入了一个实现了`HibernateCallback`接口的匿名内部类,该类的`doInHibernate`方法定义了具体的数据库操作逻辑。 ##### 2. 处理查询结果 ...
在Java Web开发中,Spring和Hibernate是两个非常重要的框架,它们常常被联合使用来处理数据库操作,如增、删、改、查(CRUD)。本文将深入探讨如何利用Spring与Hibernate整合,通过两种不同的方式来实现这些基本操作...
DAO层主要负责与数据库的交互,包含增删改查等基本操作;Service层则封装了业务逻辑,是应用的核心层。通过这种方式,开发者可以快速搭建基本的CRUD功能,节省大量时间。 DAO(Data Access Object)层的生成通常...
3. **使用HibernateTemplate**:在我们的业务逻辑类中,我们可以通过@Autowired注解或者使用getBean方法从Spring容器中获取HibernateTemplate实例,然后调用它的方法进行数据库操作。例如: ```java @Service ...
在这个“ssh_dome实现数据增删改查的示例”中,我们将深入理解如何使用这三个框架来实现数据库操作的核心功能。 首先,让我们从Struts开始。Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,它...