`

HibernateTemplate增改删查方法

 
阅读更多
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的常用方法

    通过`HibernateTemplate`,开发者可以非常方便地进行数据的增删改查等基本操作,而无需关心Hibernate Session的开启、关闭及事务管理等问题。本文将详细介绍`HibernateTemplate`的一些常用方法及其应用场景。 #### ...

    SSH2增删改查使用HibernateTemplate

    在这个框架中,HibernateTemplate是Spring提供的一个工具类,它简化了Hibernate的使用,使得开发者可以更方便地进行数据库操作,如增删改查。接下来,我们将深入探讨如何在SSH2中使用HibernateTemplate进行这些基本...

    hibernateTemplate常用方法.htm

    hibernateTemplate常用方法.htm

    HibernateTemplate汇总

    HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...

    HibernateTemplate的方法使用

    ### HibernateTemplate 的方法使用 #### 一、简介与配置方式 **HibernateTemplate** 是 Spring 框架中用于简化 Hibernate 使用的一个工具类。它通过 AOP(面向切面编程)的思想,封装了大量的 CRUD(创建、读取、...

    hibernateTemplate

    下面是一个使用`HibernateTemplate`的DAO实现类的示例代码,该类实现了`PersonDAO`接口,包含了基本的增删改查操作。 ```java public class PersonDAOHibernate implements PersonDAO { // 使用log4j记录日志 ...

    HibernateTemplate的用法总结

    在HibernateTemplate中,提供了多种常用的方法来实现数据访问操作(CRUD): 1. **`void delete(Object entity)`**:用于删除一个指定的对象实例。例如,如果要删除一个`Person`对象,可以直接调用此方法。 2. **`...

    HibernateTemplate 的常规用法.doc

    在这个例子中,`PersonDAOImpl`通过setter方法接收SessionFactory,并初始化HibernateTemplate。`getPersons()`方法使用`find`方法获取所有Person对象,而`getPerson`方法则根据主键获取特定的Person实例。 除了...

    HibernateTemplate源代码

    `HibernateTemplate`通过其核心方法`execute`支持Hibernate访问代码的实现,该方法接受一个实现了`HibernateCallback`接口的匿名内部类或Lambda表达式。 #### 二、类结构与继承关系 `HibernateTemplate`类本身并...

    HibernateTemplate详细描述以及使用范围

    在Spring框架中,`HibernateTemplate`作为ORM(Object Relational Mapping)技术中的一个重要组件,它提供了简化Hibernate操作的方法集,使得开发人员能够更加便捷地进行数据库操作。通过使用`HibernateTemplate`,...

    HibernateTemplate的简单示例

    HibernateTemplate的简单示例

    hibernateTemplate批量删除数据

    对于批量删除数据,`HibernateTemplate`提供了`bulkUpdate()`方法,该方法通过执行SQL语句或HQL(Hibernate查询语言)来高效地处理大量数据的删除操作,避免了逐条删除所带来的性能瓶颈。 ### 批量删除操作详解 在...

    关于使用HibernateTemplate

    ### 关于使用HibernateTemplate #### 一、简介与背景 在Java企业级应用开发中,持久层技术扮演着至关重要的角色。其中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,极大地简化了数据访问层的...

    HibernateTemplate类的使用

    `HibernateTemplate`中最常用的方法之一是`execute`方法,该方法接收一个`HibernateCallback`接口的实现作为参数。`HibernateCallback`是一个功能性接口,包含一个方法`doInHibernate`,开发者可以在该方法中编写...

    HibernateTemplate分组统计

    - `hibernateTemplate.execute()`方法用于执行自定义的Hibernate操作。这里传入了一个实现了`HibernateCallback`接口的匿名内部类,该类的`doInHibernate`方法定义了具体的数据库操作逻辑。 ##### 2. 处理查询结果 ...

    Spring+Hibernate实现增删改查的两种方法

    在Java Web开发中,Spring和Hibernate是两个非常重要的框架,它们常常被联合使用来处理数据库操作,如增、删、改、查(CRUD)。本文将深入探讨如何利用Spring与Hibernate整合,通过两种不同的方式来实现这些基本操作...

    基于HIbernateTemplate的代码自动生成

    DAO层主要负责与数据库的交互,包含增删改查等基本操作;Service层则封装了业务逻辑,是应用的核心层。通过这种方式,开发者可以快速搭建基本的CRUD功能,节省大量时间。 DAO(Data Access Object)层的生成通常...

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    3. **使用HibernateTemplate**:在我们的业务逻辑类中,我们可以通过@Autowired注解或者使用getBean方法从Spring容器中获取HibernateTemplate实例,然后调用它的方法进行数据库操作。例如: ```java @Service ...

    ssh_dome实现数据增删改查的示例

    在这个“ssh_dome实现数据增删改查的示例”中,我们将深入理解如何使用这三个框架来实现数据库操作的核心功能。 首先,让我们从Struts开始。Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,它...

Global site tag (gtag.js) - Google Analytics