关闭

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

23583人阅读 评论(2) 收藏 举报
分类:
直接正题

一、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/
6
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1981069次
    • 积分:16076
    • 等级:
    • 排名:第672名
    • 原创:206篇
    • 转载:212篇
    • 译文:0篇
    • 评论:140条
    最新评论