• Java代码实现真分页


    在JavaWeb项目中,分页是一个非常常见且重要的一个小方面。本次作为记载和学习,记录项目中出现的分页并做好学习记录。在这里,用的是SSH框架。框架可以理解如下图:


    在JSP页面,描写的代码如下:

     1 <div align="center">
     2         <c:if test="${page.currentPage>1}">
     3           <a href="show_findStessayAll.action?currentPage=1" >首页</a>
     4            <a href="show_findStessayAll.action?currentPage=${page.currentPage-1 }">上一页</a>
     5         </c:if>
     6         <c:if test="${page.currentPage != page.totalPage }">
     7            <a href="show_findStessayAll.action?currentPage=${page.currentPage+1 }">下一页</a>
     8            <a href="show_findStessayAll.action?currentPage=${page.totalPage}">末页</a>
     9         </c:if>                        
    10                         
    11         <form action="show_findStessayAll.action">
    12                共${page.totalPage}页  
    13            <input type="text" value="${page.currentPage}" name="currentPage" size="1">14            <input type="submit" value="go">
    15         </form>                        
    16</div>    


    Action部分代码:

     1 public String findAcadcommAll(){
     2         //page存储页面数据
     3         Page<Acadcomm> page = new Page<Acadcomm>();
     4         
     5         //总记录数    
     6         int totalRecord = showService.findAcadcommRecord();    
     7         if(totalRecord!=0){
     8             page.setTotalRecord(totalRecord);
     9             //总页数
    10             int totalPage = ( totalRecord % page.getPageSize() == 0) ? totalRecord / page.getPageSize():totalRecord / page.getPageSize()+1;    
    11             page.setTotalPage(totalPage);
    12             //当前页
    13             int currentPage = 1;
    14             String currentPageString = req.getParameter("currentPage");
    15             System.out.println("currentPageString:"+currentPageString);
    16             if(currentPageString != null){
    17                 currentPage = Integer.parseInt(currentPageString);
    18             }
    19             page.setCurrentPage(currentPage);
    20             System.out.println("currentPage:"+currentPage);
    21             
    22             String hql = "from Acadcomm a"; // 查询语句
    23             //要显示的数据
    24             if(totalRecord % page.getPageSize()!=0 && currentPage==totalPage ){
    25                 page.setDataList(showService.queryForPage(acadcomm,hql, (currentPage-1)*page.getPageSize(), totalRecord % page.getPageSize()));
    26         
    27             }else {
    28                 page.setDataList(showService.queryForPage(acadcomm,hql, (currentPage-1)*page.getPageSize(),page.getPageSize()));
    29             }
    30         }
    31         req.setAttribute("page", page);
    32         
    33         return "findAcadcommAllSuccess";
    34     }

    调用Service

    public int findStessayRecord(String hql);//返回总记录数
        public List<Stessay> queryForPage(Stessay stessay, String hql, int offset,
                int length);//返回当前页面数据

    ServiceImpl调用对应Dao里面的函数

     1 @Override
     2     public int findStessayRecord(String hql) {
     3         // TODO Auto-generated method stub
     4         
     5         return stessayDao.getAllRowCount(hql); // 总记录数
     6     }
     7     @Override
     8     public List<Stessay> queryForPage(Stessay stessay, String hql, int offset,
     9             int length) {
    10         // TODO Auto-generated method stub
    11         return stessayDao.queryForPage(hql, offset, length);
    12     }

    Dao接口只有方法,不写具体实现:

    1  public List<Stessay> findAll(); 
    2  public int getAllRowCount(String hql);
    3  public List<Stessay> queryForPage(final String hql, final int offset, final int length) ;

    具体方法的实现交给DaoImpl:

     1 /**   
     2      * 查询所有的记录数   
     3      * @param hql 查询条件   
     4      * @return 总记录数   
     5      */   
     6     @Override
     7     public int getAllRowCount(String hql) {    
     8         return this.getHibernateTemplate().find(hql).size();    
     9     }    
    10     /**   
    11      * 分页查询   
    12      * @param hql  查询条件   
    13      * @param offset  开始记录   
    14      * @param length  一次查询几条记录   
    15      * @return 查询的记录集合   
    16      */    
    17     @Override
    18     public List<Stessay> queryForPage(final String hql, final int offset, final int length) {    
    19         Session session = this.getSession();    
    20         Query q = session.createQuery(hql);    
    21         q.setFirstResult(offset);    
    22         q.setMaxResults(length);    
    23         List<Stessay> list = q.list();
    24         
    25         System.out.println("--------PaperImpl---------------size()  "+list.size());    
    26         session.close();    
    27         return list;    
    28     }   

    真分页就是页面显示多少,就从数据库里加载多少出来,这样一来就会提高效率。假分页就是将数据库里面所有的数据全部加载出来,但是只显示需要显示的部分,对于数据特别多的系统,这样下来,效率就会特别低。

  • 相关阅读:
    springboot集成thymeleaf中不能返回页面,只返回字符串
    MySql 视图
    边缘计算网关的作用
    什么是物联网网关?它有什么功能?
    RS232串口跟RS485串口有什么优缺点
    4G DTU在油田远程监控中的应用
    远程IO模块有何用途
    Spring5快乐教程(一)Spring概述
    vue水印-第一种方法
    js获取随机打乱的数组
  • 原文地址:https://www.cnblogs.com/zxcjj/p/7028927.html
Copyright © 2020-2023  润新知