Hibernate executeFind()
继承了HibernateDaoSupport的DAO类中,一般的增删改会直接使用HibernateTemplate所提供的方法去执行,而遇到一些复杂查询时find()就不好用了,当然也可以自己拼HQL放进去查。所以这种情况下就会用Session创建Query,查询完后手工关闭session。
可是既然已经用了Spring了,当然就得让Spring去管理了,所以就得用executeFind()了。executeFind()方法需要一个回调HibernateCallback当做参数,HibernateCallback是一个接口,所以还需要实现它的doInHibernate()方法,此方法传递一个Session对象,可以在这个方法中使用Session进行数据的处理。
public List<Plans> getPlanAll(Pager pager) throws Exception { List<Plans> list = this.getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session s) throws HibernateException, SQLException { Criteria cta = s.createCriteria(Plans.class); if(null != pager){ cta.setMaxResults(pager.getLimit()); cta.setFirstResult(pager.getStart()); String dir = pager.getDir(); String sort = pager.getSort(); if(null != dir && !"".equals(dir)){ if(dir.equals("ASC")){ cta.addOrder(Order.asc(sort)); } if(dir.equals("DESC")){ cta.addOrder(Order.desc(sort)); } } } return cta.list(); } }); return list; }
需要注意的是如果doInHibernate()中要使用外部方法中的参数,则外部方法的参数必须为final。
除非另有声明,本站遵循【署名-非商业性使用-相同方式共享 3.0 共享协议】授权。
转载原创文章请注明,转载自:Neeke[http://www.ineeke.com]

这个回调函数很实用。
你怎么对去年的东西感兴趣
我的链接写错了。。。麻烦改正一下
是javachen不是javahcen
呵呵 不好意思,已更正。
这种方法,我以前用过
沙发啊,貌似站点才恢复。
本文排版好像有问题,我ie
是啊,全国严查XX,殃及池鱼。你说的排版是代码吧?