首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring施用HibernateCallBack

2012-09-09 
Spring使用HibernateCallBackhttp://blog.163.com/xiaokangzhijia@126/blog/static/165954856201104174956

Spring使用HibernateCallBack
http://blog.163.com/xiaokangzhijia@126/blog/static/1659548562011041749567/

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

(1)

//==============================================public class ExtendHibernateDaoSupport extends HibernateDaoSupport{            /**          使用hql进行分页查询          @param hql 需要查询的hql语句          @param offset 第一条记录索引          @param pageSize 当前需要显示的记录数          @return 当前页的所有记录   */           public List findByPage(final String hql, final int offset, final int pageSize){            //通过一个HibernateCallback对象来执行查询                    List list = getHibernateTemplate().executeFind(            new HibernateCallback(){//实现HibernateCallback接口必须实现的方法            public Object doInHibernate(Session session)throws HibernateException, SQLException{//执行Hibernate分页查询            List result = session.createQuery(hql)            .setFirstResult(offset)            .setMaxResults(pageSize)            .list();            return result;            }            });            return list;           }           /**          使用hql进行分页查询          @param hql 需要查询的hql语句          @param value 如果hql有一个参数需要传入,value就是传入hql语句的参数          @param offset 第一条记录索引          @param pageSize 当前需要显示的记录数          @return 当前页的所有记录          */            public List findByPage(final String hql, final Object value,final int offset, final int pageSize){            //通过一个HibernateCallback对象来执行查询                   List list = getHibernateTemplate().executeFind(new HibernateCallback(){//实现HibernateCallback接口必须实现的方法             public Object doInHibernate(Session session)throws HibernateException, SQLException{//执行Hibernate分页查询             List result = session.createQuery(hql)//为hql语句传入参数             .setParameter(0,value)            .setFirstResult(offset)            .setMaxResults(pageSize)            .list();            return result;            }            });            return list;           }          /**          使用hql进行分页查询         @param hql 需要查询的hql语句          @param values 如果hql有多个参数需要传入,values就是传入hql语句的参数数组          @param offset 第一条记录索引          @param pageSize 当前需要显示的记录数          @return 当前页的所有记录          */            public List findByPage(final String hql, final Object[] values,final int offset, final int pageSize){            //通过一个HibernateCallback对象来执行查询                   List list = getHibernateTemplate().executeFind(new HibernateCallback(){                                            //实现HibernateCallback接口必须实现的方法            public Object doInHibernate(Session session)throws HibernateException, SQLException{                                                  //执行Hibernate分页查询            Query query = session.createQuery(hql);                                                   //为hql语句传入参数             for(int i=0; i<values.length; i++){            query.setParamter(i,values[i]);            }            List result = query.setFirstResult(offset)            .setMaxResults(pageSize)            .list();            return result;            }            });            return list;          }   


注意:Spring提供的XxxTemplate和XxxCallBack互为补充,XxxTemplate对通用操作进行封装,而XxxCallBack解决了封装后灵活性不足的缺陷。

热点排行