spring+hibernate 分页

关于分页有两种考虑:

 

  1. spring+hibernate 分页

  2. public List findPageMessage(final  String sql, final   int  firstRow, final   int  maxRow) {   
  3.   
  4.     return  hibernatetemplate.executeFind( new  HibernateCallback() {    
  5.   
  6.          public  Object doInHibernate(Session s)  throws  HibernateException, SQLException {    
  7.   
  8.                Query query  =  s.createQuery(sql);    
  9.   
  10.                query.setFirstResult(firstRow);    
  11.   
  12.                query.setMaxResults(maxRow);    
  13.   
  14.                List list  =  query.list();    
  15.   
  16.                return  list;    
  17.   
  18.                }    
  19.   
  20.          });    
  21.   
  22. }   

 

 

 /**
  * @Description: TODO(/hql的分页的实现)
 * @param @param queryStr  sql语句的前缀
 * @param @param params   
 * @param @param pageBean      sql语句中要加的的参数,有开始行数和显示和行数等参数
 * @param @return    设定文件
 * @return List    返回类型    是要显示的list
 * @throws
  */ 

 protected List getPage(final String queryStr, final Object[] params,
   final PageBean pageBean) {

  return this.getHibernateTemplate().executeFind(new HibernateCallback() {

   public Object doInHibernate(Session session)
     throws HibernateException, SQLException {
    Query query = session.createQuery(queryStr);
    
    // query.setCacheable(true);
    for (int i = 0; i < params.length; i++) {
     query.setParameter(i, params[i]);

    }
    if (pageBean != null && pageBean.getPageSize() > 0) {
     query.setMaxResults(pageBean.getPageSize());
     query.setFirstResult(pageBean.getCurrentPageFirstRecord());
                  
     int recordCount = count(queryStr, params);
                   
                    pageBean.setRecordCount(recordCount);
                    if((pageBean.getPageCount() - 1) * pageBean.getPageSize() > recordCount){
                        pageBean.setCurrentPage(1);
                    }
    }
    
    return query.list();   

   }
  });

 }

 

这种方法是有多个参数的,可以是一个参数的。可以是没有参数的,这样就可以直接到数据库提取数据,在datasource层设置了发言这个概念,这样有利于数据sql语句的分别调用。例如mysql的里limit的字段,limit 2,4;(从第二个结果集开始数4个结果显示出来等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值