gpt4 book ai didi

基于hibernate实现的分页技术实例分析

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章基于hibernate实现的分页技术实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了基于hibernate实现的分页技术。分享给大家供大家参考,具体如下:

先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可 先上代码:注意传进来的参数有 Page这类,后面有介绍 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public List<Article> queryByPage( final String username, final Page page) {
     return this .getHibernateTemplate().executeFind( new HibernateCallback() {
       public Object doInHibernate(Session session)
           throws HibernateException, SQLException {
         Query query = session.createQuery( "select art from Article art where art.username = ?" );
         //设置参数
         query.setParameter( 0 , username);
         //设置每页显示多少个,设置多大结果。
         query.setMaxResults(page.getEveryPage());
         //设置起点
         query.setFirstResult(page.getBeginIndex());
         return query.list();
       }
});

上面关键代码是 setMaxResults(),和setFirstResult(),即设置最大显示值和起点 。

这里我们需要一个Page工具类,用来操作分页.

Page.java:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.fenye;
public class Page {
   // 1.每页显示数量(everyPage)
   private int everyPage;
   // 2.总记录数(totalCount)
   private int totalCount;
   // 3.总页数(totalPage)
   private int totalPage;
   // 4.当前页(currentPage)
   private int currentPage;
   // 5.起始点(beginIndex)
   private int beginIndex;
   // 6.是否有上一页(hasPrePage)
   private boolean hasPrePage;
   // 7.是否有下一页(hasNextPage)
   private boolean hasNextPage;
   public Page( int everyPage, int totalCount, int totalPage, int currentPage,
       int beginIndex, boolean hasPrePage, boolean hasNextPage) {
     this .everyPage = everyPage;
     this .totalCount = totalCount;
     this .totalPage = totalPage;
     this .currentPage = currentPage;
     this .beginIndex = beginIndex;
     this .hasPrePage = hasPrePage;
     this .hasNextPage = hasNextPage;
   }
   //构造函数,默认
   public Page(){}
   //构造方法,对所有属性进行设置
   public int getEveryPage() {
     return everyPage;
   }
   public void setEveryPage( int everyPage) {
     this .everyPage = everyPage;
   }
   public int getTotalCount() {
     return totalCount;
   }
   public void setTotalCount( int totalCount) {
     this .totalCount = totalCount;
   }
   public int getTotalPage() {
     return totalPage;
   }
   public void setTotalPage( int totalPage) {
     this .totalPage = totalPage;
   }
   public int getCurrentPage() {
     return currentPage;
   }
   public void setCurrentPage( int currentPage) {
     this .currentPage = currentPage;
   }
   public int getBeginIndex() {
     return beginIndex;
   }
   public void setBeginIndex( int beginIndex) {
     this .beginIndex = beginIndex;
   }
   public boolean isHasPrePage() {
     return hasPrePage;
   }
   public void setHasPrePage( boolean hasPrePage) {
     this .hasPrePage = hasPrePage;
   }
   public boolean isHasNextPage() {
     return hasNextPage;
   }
   public void setHasNextPage( boolean hasNextPage) {
     this .hasNextPage = hasNextPage;
   }
}

Page工具类主要是封装页面信息,一共多少数据啊,一页显示多少啊,起点的序号,总页数,是否有上一页下一页,当前页.

还需要一个操作page的工具类,PageUtil.java 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.sanqing.fenye;
/*
  * 分页信息辅助类
  */
public class PageUtil {
   public static Page createPage( int everyPage, int totalCount, int currentPage) {
     everyPage = getEveryPage(everyPage);
     currentPage = getCurrentPage(currentPage);
     int totalPage = getTotalPage(everyPage, totalCount);
     int beginIndex = getBeginIndex(everyPage, currentPage);
     boolean hasPrePage = getHasPrePage(currentPage);
     boolean hasNextPage = getHasNextPage(totalPage, currentPage);
     return new Page(everyPage, totalCount, totalPage, currentPage,
         beginIndex, hasPrePage, hasNextPage);
   }
   public static Page createPage(Page page, int totalCount) {
     int everyPage = getEveryPage(page.getEveryPage());
     int currentPage = getCurrentPage(page.getCurrentPage());
     int totalPage = getTotalPage(everyPage, totalCount);
     int beginIndex = getBeginIndex(everyPage, currentPage);
     boolean hasPrePage = getHasPrePage(currentPage);
     boolean hasNextPage = getHasNextPage(totalPage, currentPage);
     return new Page(everyPage, totalCount, totalPage, currentPage,
         beginIndex, hasPrePage, hasNextPage);
   }
   //设置每页显示记录数
   public static int getEveryPage( int everyPage) {
     return everyPage == 0 ? 10 : everyPage;
   }
   //设置当前页
   public static int getCurrentPage( int currentPage) {
     return currentPage == 0 ? 1 : currentPage;
   }
   //设置总页数,需要总记录数,每页显示多少
   public static int getTotalPage( int everyPage, int totalCount) {
     int totalPage = 0 ;
     if (totalCount % everyPage == 0 ) {
       totalPage = totalCount / everyPage;
     } else {
       totalPage = totalCount / everyPage + 1 ;
     }
     return totalPage;
   }
   //设置起始点,需要每页显示多少,当前页
   public static int getBeginIndex( int everyPage, int currentPage) {
     return (currentPage - 1 ) * everyPage;
   }
   //设置是否有上一页,需要当前页
   public static boolean getHasPrePage( int currentPage) {
     return currentPage == 1 ? false : true ;
   }
   //设置是否有下一个,需要总页数和当前页
   public static boolean getHasNextPage( int totalPage, int currentPage) {
     return currentPage == totalPage || totalPage == 0 ? false : true ;
   }
}

创建Page只需要3个参数,每页显示多少数据,当前页,总共多少数据,其他的4个参数都可以通过这三个计算出来 。

所以后面要创建Page,只需要调用这工具方法PageUtil.createPage(3个参数),就返回一Page. 。

返回的Page就是前面参数的Page,即要显示的分页 。

这样就算完成了分页的功能.

希望本文所述对大家基于Hibernate框架的Java程序设计有所帮助.

最后此篇关于基于hibernate实现的分页技术实例分析的文章就讲到这里了,如果你想了解更多关于基于hibernate实现的分页技术实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com