开发者社区> 问答> 正文

java中SSH 怎么用hql实现分页呢?

如题,SSH 怎么用hql实现分页

展开
收起
小旋风柴进 2016-03-03 15:10:45 2850 0
1 条回答
写回答
取消 提交回答
  • 一、在ArticleDao中添加分页查询的方法:

    /**
    * 分页查询
    * @param hql 查询的条件
    * @param offset 开始记录
    * @param length 一次查询几条记录
    * @return
    */
    public List queryForPage(final String hql,final int offset,final int length);
    
    /** *//**
     * 查询所有记录数
     * @param hql 查询的条件
     * @return 总记录数
     */
    public int getAllRowCount(String hql);

    二、在ArticleDaoImpl中给出相应方法的具体实现:

    /**
    
    查询所有记录数 *
    @return 总记录数 */ public int getAllRowCount(String hql) { return getHibernateTemplate().find(hql).size(); }
    /**
    
    分页查询 *
    @param hql
    查询的条件
    @param offset
    开始记录
    @param length
    一次查询几条记录
    @return */ public List queryForPage(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; }

    三、在ArticleService中添加方法分页查询的方法:

    /**
    * 分页查询
    * @param currentPage 当前第几页
    * @param pageSize 每页大小
    * @return 封闭了分页信息(包括记录集list)的Bean
    */
    public PageBean queryForPage(int pageSize,int currentPage);

    四、在ArticleServiceImpl中给出相应方法的具体实现:

    /**
    
    分页查询
    @param currentPage 当前第几页
    @param pageSize 每页大小
    @return 封闭了分页信息(包括记录集list)的Bean
    */
    public PageBean queryForPage(int pageSize,int page){
    
    final String hql = "from Article";
    
    int allRow = articleDao.getAllRowCount(hql);
    
    int totalPage = PageBean.countTotalPage(pageSize, allRow);
    
    final int offset = PageBean.countOffset(pageSize, page);
    
    final int length = pageSize;
    
    final int currentPage = PageBean.countCurrentPage(page);
    List list = articleDao.queryForPage(hql,offset, length); //"一页"的记录
    
    //把分页信息保存到Bean中
    PageBean pageBean = new PageBean();
    pageBean.setPageSize(pageSize);
    
    pageBean.setCurrentPage(currentPage);
    pageBean.setAllRow(allRow);
    pageBean.setTotalPage(totalPage);
    pageBean.setList(list);
    pageBean.init();
    
    return pageBean;
    }
    
    最后一步,根据需要,在分页页面上的相应位置进行配置。基本配置如下:
    
    
    首页
    上一页
    /s:if 
    首页
    [url=...?page=上一页[/url]
    …
    /s:else
    …
    ">下一页
    ">尾页
    一、在ArticleDao中添加分页查询的方法:
    
    /**
    * 分页查询
    * @param hql 查询的条件
    * @param offset 开始记录
    * @param length 一次查询几条记录
    * @return
    */
    public List queryForPage(final String hql,final int offset,final int length);
    
    /** *//**
     * 查询所有记录数
     * @param hql 查询的条件
     * @return 总记录数
     */
    public int getAllRowCount(String hql);

    二、在ArticleDaoImpl中给出相应方法的具体实现:

    /**
    
    查询所有记录数 *
    @return 总记录数 */ public int getAllRowCount(String hql) { return getHibernateTemplate().find(hql).size(); }
    /**
    
    分页查询 *
    @param hql
    查询的条件
    @param offset
    开始记录
    @param length
    一次查询几条记录
    @return */ public List queryForPage(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; }

    三、在ArticleService中添加方法分页查询的方法:

    /**
    * 分页查询
    * @param currentPage 当前第几页
    * @param pageSize 每页大小
    * @return 封闭了分页信息(包括记录集list)的Bean
    */
    public PageBean queryForPage(int pageSize,int currentPage);

    四、在ArticleServiceImpl中给出相应方法的具体实现:

    /**
    分页查询
    @param currentPage 当前第几页
    @param pageSize 每页大小
    @return 封闭了分页信息(包括记录集list)的Bean
    */
    public PageBean queryForPage(int pageSize,int page){
    
    final String hql = "from Article";
    
    int allRow = articleDao.getAllRowCount(hql);
    
    int totalPage = PageBean.countTotalPage(pageSize, allRow);
    
    final int offset = PageBean.countOffset(pageSize, page);
    
    final int length = pageSize;
    
    final int currentPage = PageBean.countCurrentPage(page);
    List list = articleDao.queryForPage(hql,offset, length); //"一页"的记录
    
    //把分页信息保存到Bean中
    PageBean pageBean = new PageBean();
    pageBean.setPageSize(pageSize);
    
    pageBean.setCurrentPage(currentPage);
    pageBean.setAllRow(allRow);
    pageBean.setTotalPage(totalPage);
    pageBean.setList(list);
    pageBean.init();
    
    return pageBean;
    }
    
    最后一步,根据需要,在分页页面上的相应位置进行配置。基本配置如下:
    首页
    上一页
    /s:if 
    首页
    [url=...?page=上一页[/url]
    …
    /s:else
    …
    ">下一页
    ">尾页
    /s:if 
    下一页
    尾页
    /s:else
    共 value="pageBean.allRow" />条记录, value="pageBean.totalPage" />页
    至此,网站的分页功能就完成了。
    /s:if 
    下一页
    尾页
    /s:else
    共 value="pageBean.allRow" />条记录, value="pageBean.totalPage" />页

    至此,网站的分页功能就完成了。

    2019-07-17 18:51:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载