zoukankan      html  css  js  c++  java
  • hibernate怎么做分页

    我使用HibernateTemplate的,怎么做分页,给段代码吧doInHibernate(Session session)这个方法,我怎么调用,怎么传参数啊,我没有session工厂类
     
     
     
    **
    * 使用hql 语句进行操作
     
    * @param hql
    * @param offset
    * @param length
    * @return List
    */
    public List getListForPage(final String hql, final int offset,
    final int length) {
    List list = getHibernateTemplate().executeFind(new HibernateCallback() {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    Query query = session.createQuery(hql);
    query.setFirstResult(offset);
    query.setMaxResults(length);
    List list = query.list();
    return list;
    }
    });
    return list;
    }/**
    * 使用criterion进行操作
    * @param arg
    * @param criterions
    * @param offset
    * @param length
    * @return List
    */
    protected List getListForPage(final Class arg, final Criterion[] criterions,final int offset, final int length) {
    List list = getHibernateTemplate().executeFind(new HibernateCallback() {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    Criteria criteria = session.createCriteria(arg);
    //循环遍历添加约束条件
    for (int i = 0; i < criterions.length; i++) {
    criteria.add(criterions[i]);
    }
    criteria.setFirstResult(offset);
    criteria.setMaxResults(length);
    return criteria.list();
    }
    });
    return list;
     
    你不是说你用HibernateTemplate了,如果你用的是spring的HibernateTemplate,那么就直接用就行了,如果你是自己写的template,
    那你也应该会准备一个HibernateCallback类啊,这才是典型的模板加回调啊 
     
    算了,把HibernateCallback也给你贴出来
     
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
     
    /*************************************
    * 为 Hibernate 所提供的一个 回调接口,
    * 此接口定义了 统一 Hibernate的业务操作;
    * @author kenshin
    *
    */
    public interface HibernateCallback {
     
    /**************************************
    * 回调接口的回调方法,此方法使用者无需调用,
    * 它由 模板类来进行回调,并传入一个 session参数,
    * 以便让使用者完成相关业务
    * @param ses
    * @return 执行结果
    * @throws HibernateException
    */
    Object doInHibernate(Session ses)
    throws HibernateException;
     
    }
     
    *************************************
    hibernate分页
    a,将查询的条件保存到session中,或用其它方式,只要能保证翻页时能再取出就可以了
    b,数据库需要count一次总记录数,并取出结果集
    c,自己写个PageUtil类,目的是根据总记录数能算出有多少页、上一页下一页都是什么,就够了,jsp页面根据这个pageutil类的信息来写翻页的导航,1234页之类的
     
    每次根据不页码的信息(这个页码的信息应该是通过get方式得来,比如?page=3这样的参数)和以前存的查询条件,从数据库中再取出对应的结果集,应该是通过hibernate设置一下起始记录数、最大记录数
     
    大概就是这样的,可能还有些细节没有说到,自己好好整理一下吧,希望能帮助到你
     
     
     
    实际使用中,不建议使用hibernate分页操作,当然你的数据少的时候是可以的,当你数据量比较大时hibernate分页就会出现性能问题。
     
    假如你的数据有10万级(在某种情况下,数据量上万条时都会有性能问题),想想如果你翻页到最后一页它会执行什么操作吧。看看你每次翻页时打印出来的SQL语句就明白了。
     
     
     
    ****************************
    hibernate通用分页
    谁能给一个hibernate的通用分页实例,要例子,可以直接在eclipse上运行
     
    分页是有页面(前端,请求要显示哪些数据)和后台(提供前端需要的数据),Hibernate是一个持久层框架,它只能负责把你需要的数据从数据库中查询出来提供给你,org.hibernate.Query、org.hibernate.Criteria这两个接口中都提供了setFirstResult(int x),setMaxResults(int x)这两个方法,setFirstResult表示从查询得到的结果集的第几条开始获取,setMaxResults表示获取多少条数据,这样只要把页面想获取比如11-20之间的记录,只要把setFirstResult设置为10,setMaxResults设置为10即可
     
     
  • 相关阅读:
    mysql 数据类型总结
    #微信小程序子传父 #小程序子组件向父组件传值 小程序子组件触发父组件中的事件
    #最近看到了一个写的很棒的系列文章专栏
    《MySQL45讲》读书笔记(四):索引
    《MySQL45讲》读书笔记(六):数据库事务概述
    《MySQL45讲》读书笔记(一):三大日志概述
    Java基础篇(05):函数式编程概念和应用
    数据采集组件:Flume基础用法和Kafka集成
    架构设计:数据服务系统0到1落地实现方案
    Java基础篇(04):日期与时间API用法详解
  • 原文地址:https://www.cnblogs.com/huapox/p/3251570.html
Copyright © 2011-2022 走看看