HibernateTemplate.execute(HibernateCallback action)回调方式

本文介绍了在Spring中使用HibernateTemplate的execute(HibernateCallback action)方法进行数据库操作的情况,特别是如何利用回调机制处理业务逻辑。文章通过一个实际例子展示了在执行HQL查询时,因一对多关系导致的额外数据库查询,讨论了回调方法在处理AJAX请求和非AJAX请求时的不同考虑,并解释了HibernateDaoSupport和HibernateTemplate的作用,以及HibernateCallback接口的使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在做codereview的时候,发现同事用了以下方法返回一个list。看了后台日志之后,很是奇怪,为什么只有一条sql,后台却打出了101条select。

 

 

      后来简单了解了一下业务,这个方法是给AJAX调用的,list里面必须存放完整QuestionBank对象。如果用关联查询,对象不是很好封装。如果不是AJAX调用,而是传给前台的form,那么就可以用关联查询解决。


     但是作为一个新的知识点,由于以前没用过 getHibernateTemplate().executeFind(new HibernateCallback() {...}},可以学习一下这种方法。

 

      Spring为Hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:

  •  public final HibernateTemplate getHibernateTemplate()
  •  public final void setSessionFactory(SessionFactory sessionFactory)

       其中,setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例;getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。

 

      HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增删修查、对分页的支持等操作。HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:

  • Object execute(HibernateCallback action)
  • List execute(HibernateCallback action)

       HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。

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

       还有的就是采用:HibernateTemplate.execute(HibernateCallback action)这种回调的方式,封装了对异常的处理和对事务的一些处理。

       回调实际就是一种事件触发模式,就象连环地雷一样,一旦触发一个,这个再触发另外一个,你在find这个方法被执行时,希望同时执行其他方法,就需要回调。

      如例子代码中,他希望在执行executeFind()时也执行HibernateCallback 中的一些方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值