SSH分页(Hibernate分页查询)

来源:互联网 发布:无锡行知技工学校招聘 编辑:程序博客网 时间:2024/06/06 08:30

直接正题

一、INewsDao.java(DAO接口):

1 package cn.dy.dao;
2
3 import java.util.List;
4 import cn.dy.bean.News;
5
6 publicinterface INewsDao {
7
8 //其他代码省略
9
10
11 //分页查询
12 public List<News> queryForPage(String hql,int offset,int length);
13
14 //总记录条数
15 publicint 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 publicint getCount(String hql) {
12       Query q =factory.getCurrentSession().createQuery(hql);
13      returnInteger.parseInt(q.list().get(0).toString());
14 }


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

publicPageBeanqueryForPage(intpageSize, intcurrentPage);
四、业务实现类代码,注意修改参数

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("fromNews", 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代码:

   privateintpage;

   privatePageBean 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   <tdclass="tocenter">
4       <s:propertyvalue="newsId"/>
5   </td>
6   <tdcolspan="5">
7       <s:propertyvalue="newsContent"/>
8   </td>
9    <tdclass="tocenter">
10      <s:propertyvalue="beginTime"/>
11  </td>
12 </tr>
13 </s:iterator>


2、分页:

1 <tr>
2   <tdwidth="13%" class="tocenter">
3  
4       <s:propertyvalue="pageBean.totalPage"/>
5    
6   </td>
7   <tdwidth="17%" class="tocenter">
8  
9       <s:propertyvalue="pageBean.allRow"/>
10 条记录
11  </td>
12  <tdwidth="15%" class="tocenter">
13 当前第
14      <s:propertyvalue="pageBean.currentPage"/>
15
16 </td>
17 <tdcolspan="4" width="55%" class="tocenter">
18      <s:iftest="%{pageBean.currentPage== 1}">第一页&nbsp;&nbsp;&nbsp;&nbsp;上一页&nbsp;&nbsp;&nbsp;&nbsp;</s:if>
19      <s:else>
20          <ahref="/DyEnigma/news/op_getPageList.do?page=1">第一页&nbsp;&nbsp;&nbsp;&nbsp;</a>
21          <ahref="/DyEnigma/news/op_getPageList.do?page=<s:propertyvalue="%{pageBean.currentPage-1}"/>">上一页&nbsp;&nbsp;&nbsp;&nbsp;</a>
22      </s:else>
23      <s:iftest="%{pageBean.currentPage!= pageBean.totalPage}">
24          <ahref="/DyEnigma/news/op_getPageList.do?page=<s:propertyvalue="%{pageBean.currentPage+1}"/>">下一页&nbsp;&nbsp;&nbsp;&nbsp;</a>
25          <ahref="/DyEnigma/news/op_getPageList.do?page=<s:propertyvalue="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")
6publicclass PageBean {
7
8private List list;//要返回的某一页的记录列表
9
10privateint allRow;// 总记录数
11privateint totalPage;// 总页数
12privateint currentPage;// 当前页
13privateint pageSize;//每页记录数
14
15 @SuppressWarnings("unused")
16privateboolean isFirstPage;// 是否为第一页
17 @SuppressWarnings("unused")
18privateboolean isLastPage;//是否为最后一页
19 @SuppressWarnings("unused")
20privateboolean hasPreviousPage;// 是否有前一页
21 @SuppressWarnings("unused")
22privateboolean hasNextPage;//是否有下一页
23
24public List getList() {
25      return list;
26 }
27
28publicvoid setList(List list) {
29      this.list = list;
30 }
31
32publicint getAllRow() {
33      returnallRow;
34 }
35
36publicvoid setAllRow(intallRow) {
37      this.allRow = allRow;
38 }
39
40publicint getTotalPage() {
41      return totalPage;
42 }
43
44publicvoid setTotalPage(inttotalPage) {
45      this.totalPage = totalPage;
46 }
47
48publicint getCurrentPage() {
49      return currentPage;
50 }
51
52publicvoid setCurrentPage(intcurrentPage) {
53      this.currentPage= currentPage;
54 }
55
56publicint getPageSize() {
57      return pageSize;
58 }
59
60publicvoid setPageSize(intpageSize) {
61      this.pageSize = pageSize;
62 }
63
64/**
65 * 初始化分页信息
66 */
67publicvoid 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 */
79publicboolean isFirstPage() {
80      returncurrentPage == 1;// 如是当前页是第1
81 }
82
83publicboolean isLastPage() {
84      returncurrentPage == totalPage;// 如果当前页是最后一页
85 }
86
87publicboolean isHasPreviousPage() {
88      returncurrentPage != 1;//只要当前页不是第1
89 }
90
91publicboolean isHasNextPage() {
92      returncurrentPage != totalPage;// 只要当前页不是最后1
93 }
94
95/**
96 * 计算总页数,静态方法,供外部直接通过类名调用
97 *
98 * @param pageSize每页记录数
99 * @param allRow总记录数
100 * @return总页数
101 */
102publicstaticint countTotalPage(finalint pageSize, finalint 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 */
114publicstaticint countOffset(finalint pageSize, finalint currentPage) {
115         finalint offset = pageSize * (currentPage - 1);
116         return offset;
117 }
118
119/**
120 * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
121 *
122 * @paramPage传入的参数(可能为空,即0,则返回1)
123 * @return当前页
124 */
125publicstaticint countCurrentPage(int page){
126         finalint curPage = (page == 0 ? 1 : page);
127         return curPage;
128 }
129}



OK,完工

转载原文来源http://www.blogjava.net/DyEnigma/

原创粉丝点击