Hibernate的复杂用法HibernateCallback

转载 2007年10月08日 21:48:00

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

q      Object execute(HibernateCallback action)

q      List execute(HibernateCallback action)

这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session

通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。具体代码如下:

public class PersonDaoImpl implements PersonDao

{

    //私有实例变量保存SessionFactory

         private SessionFactory sessionFactory;

         //依赖注入必须的setter方法

    public void setSessionFactory(SessionFactory sessionFactory)

         {

           this.sessionFactory = sessionFactory;

    }

         /**

          * 通过人名查找所有匹配该名的Person实例

          * @param name 匹配的人名

          * @return 匹配该任命的全部Person集合

          */

    public List findPersonsByName(final String name)

         {

           //创建HibernateTemplate实例

                   HibernateTemplate hibernateTemplate =

                         new HibernateTemplate(this.sessionFactory);

           //返回HibernateTemplateexecute的结果

                   return (List) hibernateTemplate.execute(

                //创建匿名内部类

                   new HibernateCallback()

                   {

              public Object doInHibernate(Session session) throws HibernateException

                            {

                   //使用条件查询的方法返回

                                     List result = session.createCriteria(Person.class)

                                                                     .add(Restrictions.like(“name”, name+”%”)

                                                                           .list();

                                    return result;

                     }

                });

    }

}

注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。

 

Java回调机制以及使用HibernateCallBack()接口的好处

最近在做项目有太多的关于框架的
  • hyhy2203390
  • hyhy2203390
  • 2014年07月15日 23:28
  • 1558

Hibernate使用原生SQL适应复杂数据查询

Hibernate使用原生SQL适应复杂数据查询                                                                         ...
  • shenxiuwen1989
  • shenxiuwen1989
  • 2016年06月28日 11:19
  • 1660

Spring对ORM的支持之集成Hibernate3

Hibernate是全自动的ORM框架,能自动为对象生成相应SQL并透明的持久化对象到数据库。 Spring2.5+ 版本支持Hibernate 3.1+ 版本,不支持低版本,Spring 3....
  • u013310119
  • u013310119
  • 2016年05月12日 09:03
  • 4016

Hibernate的复杂用法HibernateCallback

HibernateTemplate提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,只要创建HibernateTemplate实例后,注入一个SessionFactory的引用就可以...
  • zhaokuner
  • zhaokuner
  • 2011年03月29日 16:35
  • 586

spring 对于hibernate操作的封装 HibernateCallback接口的学习

spring 对于hibernate操作的封装 HibernateCallback接口的学习
  • u013244809
  • u013244809
  • 2016年03月01日 16:39
  • 253

hibernate使用HibernateCallback 回调的方法查询SQL时could not execute query--作怪的别名

最近用hibernate3,发现一个奇怪的现象,写的sql语句查询有时报错有时正常。 下面是我用的DAO层的实现类: /** * 使用 sql 语句进行操作 * ...
  • rebornet105
  • rebornet105
  • 2017年02月14日 20:52
  • 865

hibernate的executeWithNativeSession(HibernateCallbk())、execute(new HibernateCallback())无法对spring事务回滚

hibernate作为DAO使用如下的方法操作数据库时,无法对spring在service层添加的事务进行回滚。 hibernateTemplate.executeWithNativeS...
  • Petershusheng
  • Petershusheng
  • 2016年09月04日 15:10
  • 1595

Android 弹无虚发之第二弹:Android ActionBar 的其它用法(搜索、分享、隐藏复杂布局,模仿Google Play,微信)

  • 2014年02月02日 21:29
  • 1.61MB
  • 下载

Hibernate注解用法总结

  • 2016年10月19日 08:48
  • 47KB
  • 下载

Hibernate中Criteria的完整用法.docx

  • 2009年07月02日 17:19
  • 19KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate的复杂用法HibernateCallback
举报原因:
原因补充:

(最多只允许输入30个字)