您的位置:首页 > 其它

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

2015-07-08 13:19 633 查看
直接正题

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