SSH分页(Hibernate实现简单分页查询)

转载 2015年07月08日 13:19:28
直接正题

一、INewsDao.java(DAO接口):

 1 package cn.dy.dao;
 2 
 3 import java.util.List;
 4 import cn.dy.bean.News;
 5 
 6 public interface INewsDao {
 7 
 8     //其他代码省略
 9     
10     
11     //分页查询
12     public List<News> queryForPage(String hql,int offset,int length);
13     
14     //总记录条数
15     public int getCount(String hql);
16 }
17 

二、dao实现类,因为第13行中q.list().get(0)的返回值为long,所以转换一下。

 1 @SuppressWarnings("unchecked")
 2     @Override
 3     public List<News> queryForPage(String hql,int offset, int length) {
 4         Query q = factory.getCurrentSession().createQuery(hql);
 5         q.setFirstResult(offset);
 6         q.setMaxResults(length);
 7         return q.list();
 8     }
 9 
10     @Override
11     public int getCount(String hql) {
12         Query q = factory.getCurrentSession().createQuery(hql);
13         return Integer.parseInt(q.list().get(0).toString());
14     }

三、INewsService.java业务接口,添加方法

public PageBean queryForPage(int pageSize, int currentPage);

四、业务实现类代码,注意修改参数

 1 @Override
 2     public PageBean queryForPage(int pageSize, int page) {
 3         String hql = "select count(*) from News";
 4         int count = newsDao.getCount(hql); // 总记录数
 5         int totalPage = PageBean.countTotalPage(pageSize, count); // 总页数
 6         int offset = PageBean.countOffset(pageSize, page); // 当前页开始记录
 7         int length = pageSize; // 每页记录数
 8         int currentPage = PageBean.countCurrentPage(page);
 9         List<News> list = newsDao.queryForPage("from News", offset, length); // 该分页的记录
10         // 把分页信息保存到Bean中
11         PageBean pageBean = new PageBean();
12         pageBean.setPageSize(pageSize);
13         pageBean.setCurrentPage(currentPage);
14         pageBean.setAllRow(count);
15         pageBean.setTotalPage(totalPage);
16         pageBean.setList(list);
17         pageBean.init();
18         return pageBean;
19     }

五、action代码:

    private int page;
    private PageBean pageBean;
    
    以及上面两个的get()、set()方法。
   
    public String getPageList() {
        this.pageBean = newsService.queryForPage(6, page);
        return "newsList";
    }

    这个6,是每页6个数据,可以通过页面动态传值。

六、页面代码

1、显示代码:
 1                 <s:iterator value="pageBean.list">
 2                     <tr>
 3                         <td class="tocenter">
 4                             <s:property value="newsId" />
 5                         </td>
 6                         <td colspan="5">
 7                             <s:property value="newsContent" />
 8                         </td>
 9                         <td class="tocenter">
10                             <s:property value="beginTime" />
11                         </td>
12                     </tr>
13                 </s:iterator>

2、分页:

 1                 <tr>
 2                     <td width="13%" class="tocenter">
 3                         共
 4                         <s:property value="pageBean.totalPage" />
 5                         页
 6                     </td>
 7                     <td width="17%" class="tocenter">
 8                         共
 9                         <s:property value="pageBean.allRow" />
10                         条记录
11                     </td>
12                     <td width="15%" class="tocenter">
13                         当前第
14                         <s:property value="pageBean.currentPage" />
15                         页
16                     </td>
17                     <td colspan="4" width="55%" class="tocenter">
18                         <s:if test="%{pageBean.currentPage == 1}">第一页&nbsp;&nbsp;&nbsp;&nbsp;上一页&nbsp;&nbsp;&nbsp;&nbsp;</s:if>
19                         <s:else>
20                             <href="/DyEnigma/news/op_getPageList.do?page=1">第一页&nbsp;&nbsp;&nbsp;&nbsp;</a>
21                             <href="/DyEnigma/news/op_getPageList.do?page=<s:property value="%{pageBean.currentPage-1}"/>">上一页&nbsp;&nbsp;&nbsp;&nbsp;</a>
22                         </s:else>
23                         <s:if test="%{pageBean.currentPage != pageBean.totalPage}">
24                             <href="/DyEnigma/news/op_getPageList.do?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页&nbsp;&nbsp;&nbsp;&nbsp;</a>
25                             <href="/DyEnigma/news/op_getPageList.do?page=<s:property value="pageBean.totalPage"/>">最后一页</a>
26                         </s:if>
27                         <s:else>下一页&nbsp;&nbsp;&nbsp;&nbsp; 最后一页</s:else>
28                     </td>
29                 </tr>

七、PageBean文件

  1package cn.dy.own;
  2
  3import java.util.List;
  4
  5@SuppressWarnings("unchecked")
  6public class PageBean {
  7
  8    private List list;// 要返回的某一页的记录列表
  9    
 10    private int allRow; // 总记录数
 11    private int totalPage; // 总页数
 12    private int currentPage; // 当前页
 13    private int pageSize;// 每页记录数
 14    
 15    @SuppressWarnings("unused")
 16    private boolean isFirstPage; // 是否为第一页
 17    @SuppressWarnings("unused")
 18    private boolean isLastPage;// 是否为最后一页
 19    @SuppressWarnings("unused")
 20    private boolean hasPreviousPage; // 是否有前一页
 21    @SuppressWarnings("unused")
 22    private boolean hasNextPage;// 是否有下一页
 23
 24    public List getList() {
 25        return list;
 26    }

 27
 28    public void setList(List list) {
 29        this.list = list;
 30    }

 31
 32    public int getAllRow() {
 33        return allRow;
 34    }

 35
 36    public void setAllRow(int allRow) {
 37        this.allRow = allRow;
 38    }

 39
 40    public int getTotalPage() {
 41        return totalPage;
 42    }

 43
 44    public void setTotalPage(int totalPage) {
 45        this.totalPage = totalPage;
 46    }

 47
 48    public int getCurrentPage() {
 49        return currentPage;
 50    }

 51
 52    public void setCurrentPage(int currentPage) {
 53        this.currentPage = currentPage;
 54    }

 55
 56    public int getPageSize() {
 57        return pageSize;
 58    }

 59
 60    public void setPageSize(int pageSize) {
 61        this.pageSize = pageSize;
 62    }

 63
 64    /**
 65     * 初始化分页信息
 66     */

 67    public void init() {
 68        this.isFirstPage = isFirstPage();
 69        this.isLastPage = isLastPage();
 70        this.hasPreviousPage = isHasPreviousPage();
 71        this.hasNextPage = isHasNextPage();
 72    }

 73
 74    /**
 75     * 以下判断页的信息,只需getter方法(is方法)即可
 76     * 
 77     * @return
 78     */

 79    public boolean isFirstPage() {
 80        return currentPage == 1// 如是当前页是第1页
 81    }

 82
 83    public boolean isLastPage() {
 84        return currentPage == totalPage; // 如果当前页是最后一页
 85    }

 86
 87    public boolean isHasPreviousPage() {
 88        return currentPage != 1;// 只要当前页不是第1页
 89    }

 90
 91    public boolean isHasNextPage() {
 92        return currentPage != totalPage; // 只要当前页不是最后1页
 93    }

 94
 95    /**
 96     * 计算总页数,静态方法,供外部直接通过类名调用
 97     * 
 98     * @param pageSize每页记录数
 99     * @param allRow总记录数
100     * @return 总页数
101     */

102    public static int countTotalPage(final int pageSize, final int allRow) {
103        int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1;
104        return totalPage;
105    }

106
107    /**
108     * 计算当前页开始记录
109     * 
110     * @param pageSize每页记录数
111     * @param currentPage当前第几页
112     * @return 当前页开始记录号
113     */

114    public static int countOffset(final int pageSize, final int currentPage) {
115        final int offset = pageSize * (currentPage - 1);
116        return offset;
117    }

118
119    /**
120     * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
121     * 
122     * @paramPage 传入的参数(可能为空,即0,则返回1)
123     * @return 当前页
124     */

125    public static int countCurrentPage(int page) {
126        final int curPage = (page == 0 ? 1 : page);
127        return curPage;
128    }

129}


OK,完工。 

转载请注明来源http://www.blogjava.net/DyEnigma/

相关文章推荐

Hibernate实现分页查询的原理分析

原文链接 Hibernate 可以实现分页查询,例如: 从第2万条开始取出100条记录 Java代码 收藏代码Query q = session.createQuery("from Cat a...
  • cztq15
  • cztq15
  • 2016年04月27日 21:21
  • 3221

Hibernate第十篇【Hibernate查询详解、分页查询】

前言在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式….到目前为止,我们都是使用一些简单的主键查询阿…使用HQL查询所有的数据….本博文主要讲解Hibernate的查询操作...
  • hon_3y
  • hon_3y
  • 2017年05月08日 15:58
  • 1931

(2)hibernate HQL命名查询和Query接口的分页查询

hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定:  Pre...

Struts2+Hibernate分页显示实例

下面是一个struts2+hibernate的分页显示,主要是用到了hibernate的相应分页方法大大简单了分页的代码版本:Struts2.1.8         Hibernate3.2     ...

Hibernate分页查询小结

通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询: 1、QBE(Qurey By Example)检索方式 QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大...
  • bitsjx
  • bitsjx
  • 2011年11月04日 15:56
  • 8308

Hibernate分页(sql和hql)两种方法

1、Hibernate原生sql分页 @Transactional public PagerBean findModelLabelAll(PagerBean pager, String dat...

hibernate 分页的两种方法

criteria分页 public Page getPage(int currentPage,int pageSize,Criterion...crts){ Criteria c=session....

SSH hibernate 分页的几种实现方式

转载请注明出处~!! 第一种: DetachedCriteria  Criteria 形式 @SuppressWarnings({ "unchecked", "rawtypes" }) p...

hibernate3与hibernate4实现分页查询的简单方法

1.hibernate3实现分页查询hibernate3实现分页查询需要继承HibernateDaoSupport类,实现代码如下:protected List findByPage(final St...

基于hibernate实现的分页技术

先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可 先上代码:注意传进来的参数有 Pag...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH分页(Hibernate实现简单分页查询)
举报原因:
原因补充:

(最多只允许输入30个字)