基于hibernate实现的分页技术

    xiaoxiao2021-03-25  85

    先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可

    先上代码:注意传进来的参数有 Page这类,后面有介绍

    [javascript]  view plain  copy 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

    [java]  view plain  copy 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

    [javascript]  view plain  copy 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,即要显示的分页

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

    转载请注明原文地址: https://ju.6miu.com/read-13764.html

    最新回复(0)