读书人

Spring中hibernate的分页步骤Callback

发布时间: 2012-11-21 08:23:25 作者: rapoo

Spring中hibernate的分页方法Callback讨论
Spring和Hibernate结合的时候,接口提供非常有限
尤其是对于一些需要自定义对数据进行更改的操作时,Spring提供的update和save就远远无法满足复杂的业务需求了
此时,我们只能使用callback方法来回调,除此以外,Hibernate的分页查询功能也不能逃脱此列,只能使用callback方法来实现

于是我在架构项目的时候,写了两个callback方法以简化开发,减少冗余代码
一个是ExecuteCallback,用于执行更新和删除的
一个是PageCallback,用于执行hibernate分页的
这里就以PageCallback为例来讨论

protected List getPage(final String hql, final int startrow,final int pagesize) {    return getHibernateTemplate().executeFind(new HibernateCallback(){        public Object doInHibernate(Session session) throws HibernateException,               SQLException {               Query query = session.createQuery(hql);               query.setFirstResult(startRow);               query.setMaxResults(pageSize);               List list = query.list();               return list;           }     }}protected void execute(final String hql) {    public synchronized Object doInHibernate(Session session) throws HibernateException,SQLException {Query query = session.createQuery(hql);return query.executeUpdate();}    }}


然后子类dao中所有需要分页的都用getPage方法,所有需要对数据库数据执行操作的使用execute方法,只要使用这两个方法就能实现原来的两个callback类实现的方法了
而且不存在线程安全问题,也不存在代码冗余问题,无论如何也只有2个内部类。。。
貌似这个方法是最好的。。。正是我一直以来寻求的方法。。。。还真是灵光一闪阿。。。
想了很久了,没想到突然想到了。。。哈哈哈哈

大家觉得如何?
我说的用参数代替实例变量就是这个意思 7 楼 欣水寓言 2009-04-09 xieyongwei 写道
用ThreadLocal,不行?

总不能每次查询的时候都用它吧?
代码冗余严重。。

读书人网 >软件架构设计

热点推荐