`

为什么要采用“HibernateCallback”

阅读更多
HibernateTemplate提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,只要创建HibernateTemplate实例后,注入一个SessionFactory的引用就可以了.无须手动创建sessionFactory,更加智能的管理Hibernate 的Session,没有大量的try/catch操作,
  void delete(Object entity)删除指定持久化实例
  deleteAll(Collection entities)删除集合内全部持久化实例
  find(String queryString)根据HQL查询字符串返回实例集合
  findByNamedQuery(Striing QueryName)根据命名查询返回实例集合
  Get(Class entityClass,Serializable id)割据主键加载特定持久化类的实例
  save(Object entity)保存实例
  saveOrUpdate(Object entity)根据实例状态,选择保存或者更新
  update(Object entity)更新实例的状态
  setMaxResults(int maxResults)设置分页大小

Hibernate的复杂用法HibernateCallback
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。
HibernateTemplate的灵活访问方式是通过如下两个方法完成:

(1)Object execute(HibernateCallback action)

(2)List execute(HibernateCallback action)

这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。
程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),
该方法只有一个参数Session。通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
方法doInHibernate的方法体就是Spring执行的持久化操作。

还有的就是采用:
HibernateTemplate.execute(HibernateCallback action)这种回调的方式,封装了对异常的处理和对事务的一些处理。
如:
public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException { 
  // ......(省略) 
  // ...... 
    try { 
        previousFlushMode = applyFlushMode(session, existingTransaction); 
        enableFilters(session); 
        Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session)); 
        Object result = action.doInHibernate(sessionToExpose); 
        flushIfNecessary(session, existingTransaction); 
        return result;  
    }catch (HibernateException ex){ 
    //省略 
    } 
    }catch (SQLException ex){ 
    // ......(省略) 
    }catch (RuntimeException ex) { 
    // ......(省略) 
    }finally{ 
    // ......(省略) 
    } 
}
分享到:
评论

相关推荐

    第24次课-1 Spring与Hibernate的整合

    通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate()就是Spring执行的持久化操作。 24.3 Spring对Hibernate的简化 24.3.5 HibernateDaoSupport Spring为与...

    ssh分页实现.

    然而,在采用MVC架构进行分层开发的现代Web应用中,这种做法不再适用。分层设计要求业务逻辑、数据访问和用户界面分离,因此,分页功能也需在不同的层次上进行适当的封装和实现。 ### 二、DAO层设计 在SSH框架中,...

    Spring对DAO的支持.doc

    【Spring对DAO的支持】 在Java开发中,Spring框架提供了对数据访问对象(DAO)的强大支持,旨在降低...这种支持鼓励开发者采用面向接口的编程风格,有利于实现松散耦合的架构,从而提高整体系统的灵活性和可扩展性。

    HibernateS整合pring

    在Spring中,DAO(Data Access Object)模式被广泛采用,用于封装数据库操作。Spring提供了对DAO的支持,包括针对不同数据访问技术如JDBC、Hibernate或JDO的抽象。开发者可以通过继承Spring提供的DAO支持类来创建DAO...

    SSH2分页算法的实现

    ### SSH2分页算法的实现 #### 一、概述 在`struts2+hibernate+spring`(简称SSH2)项目开发中,分页功能是常见的需求之一。...此外,还可以进一步优化查询性能,比如采用更高效的查询策略或缓存机制等。

    常用的HQL语句!!!!

    this.getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { return session.createQuery(hql).executeUpdate();...

    struts2和spring整合

    在现代Web应用开发中,为了更好地实现业务逻辑的分离与组件化管理,通常会采用多种框架结合的方式进行开发。Struts2作为一款优秀的MVC框架,主要用于处理前端请求与控制流程;而Spring框架则提供了一种轻量级的依赖...

    spring struts2 hibernate 整合教程 详细入门

    随着企业级应用需求的不断增加,为了更好地实现项目的模块化管理和提高代码的可维护性,越来越多的开发者选择采用MVC架构(Model-View-Controller)进行开发。在Java Web开发领域,Struts2作为经典的MVC框架之一,...

    三大框架整合实现分页

    尤其在采用MVC架构,如Spring、Hibernate、Struts2(通常称为SSH框架)的项目中,实现高效的分页功能显得尤为重要。本文将深入探讨如何在三大框架整合的环境下实现分页,基于提供的文件信息进行详细解析。 ### 分页...

    JspWeb开发CRUD 操作

    综上所述,CRUD操作在JSP Web开发中扮演着至关重要的角色,通过合理的代码设计和框架利用,可以高效地管理数据,为用户提供丰富的功能体验。无论是增删查改,都需要程序员对底层数据库操作有深刻的理解,以及对所...

    HibernateSpringStruts2整合开发中的一个分页显示方案.doc

    在基于Java的企业级Web开发中,常常采用SSH(Spring、Struts2、Hibernate)框架进行整合开发。在大型系统中,为了提高用户体验和系统性能,分页显示是必不可少的功能。本篇文章将详细介绍如何在SSH整合开发中实现一...

    一些常用的JSP分页技术

    除了使用Hibernate等ORM框架进行分页外,还可以采用传统的JSP和Servlet技术实现分页。 #### JSP页面分页示例 1. **页面初始化及数据库连接配置**: - 示例代码首先通过`@page`指令引入必要的包,并使用`jsp:...

    SSH实现分页查

    为了提高用户体验并优化性能,采用分页查询是一种非常有效的方法。本篇文章将详细介绍如何利用SSH框架(Spring、Struts、Hibernate)来实现分页查询功能。 #### 二、基础知识介绍 1. **SSH框架简介**: - **...

    hibernateTemplate批量删除数据

    在具体实现批量删除时,通常采用HQL或SQL语句。HQL是一种面向对象的查询语言,它允许开发者以面向对象的方式编写查询语句,而无需关心底层数据库的具体实现。下面通过一个示例来展示如何使用`HibernateTemplate`的`...

    (java web) jsp分页显示

    因此,通常采用分页技术来解决这一问题。分页技术可以有效地控制每次展示的数据量,提高用户体验,减轻服务器负担。 #### 二、分页显示的基本原理 分页显示的核心思想是将大量数据按照一定的数量分割成多个部分...

    ssh(structs,spring,hibernate)框架中的上传下载

     使用BlobByteArrayType字段类型后,为什么我们就可以象一般的字段类型一样操作Blob字段呢?可以确定的一点是:BlobByteArrayType不可能逾越Blob天生的操作方式,原来是BlobByteArrayType数据类型本身具体数据访问...

    ssh2分页代码

    例如,在采用MVC架构(如Spring MVC)的项目中,业务逻辑、数据访问逻辑以及视图展示应该被明确地分离,以提高系统的可维护性和扩展性。 本篇文章将详细介绍如何在基于SSH2(Spring + Hibernate + Struts2)框架的...

    struts+spring+hibernate通用分页方法

    这种方式更为高效,因为它减少了不必要的数据传输和内存开销。 在给定的内容中提到,采用的是第二种策略——物理分页。这种方法能够确保系统性能的同时提供良好的用户体验。 ##### 2.2 物理分页具体步骤 物理分页...

Global site tag (gtag.js) - Google Analytics