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     }   

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

时间: 2024-10-18 19:03:04

Java代码实现真分页的相关文章

网站真分页js代码该怎么写?

真分页这个词对程序猿们来说,并不是一个陌生的词汇,但是如果你是初次学习真分页,或许还是得花点时间小小研究下,下面是之前去转盘网(喜欢的可以看看,也可以进入引擎模式)的真分页js部分代码,html部分的我就不写了,稍微处理下代码就可以使用的,你也可以根据需要灵活变动,千万不要懒惰哦,废话不说了,直接上代码: function get_param(param){ //这个函数是用来获取url的参数的 var query = location.search.substring(1).split('&'

Java代码实现 增删查 + 分页——实习第四天

今天项目内容已经开始了,并且已经完成好多基本操作,今天就开始总结今天学习到的内容,和我遇到的问题,以及分析这其中的原因. 内容模块: 1:Java代码实现对数据库的增删查: 2:分页且获取页面信息: 这里针对于项目里面的Genre实体,以及对于它的操作进行举例 1 package com.music.entity; 2 3 public class Genre { 4 private int id; 5 private String name; 6 private String descript

GridView真分页全套复用代码(转)

原文地址:GridView真分页全套复用代码作者:jacland 1.页面部分: <PagerTemplate>                           <div style="display: inline; float:right;">                                   <asp:TextBox ID="txbPage" runat="server" BorderSt

JAVA学习之 实现分页查询

分页是系统中常用到的功能,只要涉及到查询必定伴随而来的就是分页,之前也学习过关于分页的内容,例如在牛腩的新闻发布系统,之前学习的大部分都是使用了假分页,这次学习java,使用Oracle数据库来实现一下真分页. 首先来说一下实现这个分页查询的流程: 一.封装分页信息: 需要分页的部分我们首先要做的是为分页封装一个分页实体,方便返回查询信息,封装如下: /** *封装分页信息 * @author YoungJong * */ public class PageModel<E> { //结果集 p

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(一)

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中,这个问题分一下几步走 1.将弹出框真分页后复选框选择的数据保存. 2.将弹出框保存的数据传到父页面上. 3.将数据在父页面上显示. 4.点击保存将信息存入数据库中. 首先来第一步将弹出框真分页后复选框选择的数据保存. 思路很简单就是先真分页,然后在点击下一页的时候扫描这一页所有点击复选框的数据保存到一个变量数组中.下面就是主要代码: ASP代码: <%@ Page Language="C#" AutoEventWire

分页“真分页”获取数据

对于初学的新手来说,做数据分页的时候,经常是去网上下载个控件,所谓控件分页,有的人认为很好,因为方便,但是对于老鸟来说 控件分页查询效率太低,在实际工作中,也会带来致命的弱点,所以,我们一般采用真分页,部分查询,效率没得说!! 石家庄ReactNative交流群 526955818欢迎大家加入 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threadi

【Android】Android Studio 1.5+ 中混合调试Native和Java代码

[Android]Android Studio 1.5+ 中调试Native和Java代码 Android Studio 1.5+表示Android Studio 1.5版本以及以上. 网上大部分中文或英语教程还是停留在老版本的Android Studio的Debug的设置,要么不全.正好最近工作中要在Android Studio中调试C++代码,就来写一篇咯. Android Studio 1.5+的调试设置与之前有所不同. 而且新版中推出了一个Hybrid的调试:可以混合调试Native代码

Jsp分页实例---真分页

网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给客户端,由js来控制每一页的显示. 真分页:由程序控制,每一次只返回一页大小的数据,显示到客户端. 由此可以很清楚的分辨出真假分页各自的优缺点: 假分页:由于一次性读出所有数据并返回给客户端,如果数据量庞大,所以这一次的动作可能是非常消耗服务器资源和带宽的, 但是返回给客户端以后就非常轻松了,客户在

自学总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)

六.redis多数据类型介绍(常用命令) 6.1前提操作 #如果前面的redis环境没搭好,那么可以先暂时在 "http://try.redis.io/"中实践redis命令部分.   #为了测试方便,把redis登录密码暂时撤销   #redis一共分为五种基本数据类型:String,Hash,List,Set,ZSet #所有命令都可以到"http://www.redis.cn/commands.html"  去搜索到. #首先由于redis是一个基于key-v