您的位置:首页 > 其它

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

2016-11-02 21:06 429 查看
直接正题

一、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 
4000
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}">第一页    上一页    </s:if>
19                         <s:else>
20                             <a href="/DyEnigma/news/op_getPageList.do?page=1">第一页    </a>
21                             <a href="/DyEnigma/news/op_getPageList.do?page=<s:property value="%{pageBean.currentPage-1}"/>">上一页    </a>
22                         </s:else>
23                         <s:if test="%{pageBean.currentPage != pageBean.totalPage}">
24                             <a href="/DyEnigma/news/op_getPageList.do?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页    </a>
25                             <a href="/DyEnigma/news/op_getPageList.do?page=<s:property value="pageBean.totalPage"/>">最后一页</a>
26                         </s:if>
27                         <s:else>下一页     最后一页</s:else>
28                     </td>
29                 </tr>

七、PageBean文件

  1

package cn.dy.own;
  2


  3

import java.util.List;
  4


  5

@SuppressWarnings("unchecked")
  6

public 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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: