Java代码实现真分页

Posted Seraphjin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     }   

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

 

以上是关于Java代码实现真分页的主要内容,如果未能解决你的问题,请参考以下文章

存储过程实现真分页效果

java 分页ID显示问题

Asp.Net真分页技术

JAVA-分页查询

JavaWeb分页的实现

分页“真分页”获取数据