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


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

 <div align="center">
<c:if test="${page.currentPage>1}">
   <a href="show_findStessayAll.action?currentPage=1" >首页</a>
<a href="show_findStessayAll.action?currentPage=${page.currentPage-1 }">上一页</a>
</c:if>
<c:if test="${page.currentPage != page.totalPage }">
<a href="show_findStessayAll.action?currentPage=${page.currentPage+1 }">下一页</a>
<a href="show_findStessayAll.action?currentPage=${page.totalPage}">末页</a>
</c:if> <form action="show_findStessayAll.action">
共${page.totalPage}页
<input type="text" value="${page.currentPage}" name="currentPage" size="1">页
<input type="submit" value="go">
</form>
</div>

Action部分代码:

 public String findAcadcommAll(){
//page存储页面数据
Page<Acadcomm> page = new Page<Acadcomm>(); //总记录数
int totalRecord = showService.findAcadcommRecord();
if(totalRecord!=0){
page.setTotalRecord(totalRecord);
//总页数
int totalPage = ( totalRecord % page.getPageSize() == 0) ? totalRecord / page.getPageSize():totalRecord / page.getPageSize()+1;
page.setTotalPage(totalPage);
//当前页
int currentPage = 1;
String currentPageString = req.getParameter("currentPage");
System.out.println("currentPageString:"+currentPageString);
if(currentPageString != null){
currentPage = Integer.parseInt(currentPageString);
}
page.setCurrentPage(currentPage);
System.out.println("currentPage:"+currentPage); String hql = "from Acadcomm a"; // 查询语句
//要显示的数据
if(totalRecord % page.getPageSize()!=0 && currentPage==totalPage ){
page.setDataList(showService.queryForPage(acadcomm,hql, (currentPage-1)*page.getPageSize(), totalRecord % page.getPageSize())); }else {
page.setDataList(showService.queryForPage(acadcomm,hql, (currentPage-1)*page.getPageSize(),page.getPageSize()));
}
}
req.setAttribute("page", page); return "findAcadcommAllSuccess";
}

调用Service

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

ServiceImpl调用对应Dao里面的函数

 @Override
public int findStessayRecord(String hql) {
// TODO Auto-generated method stub return stessayDao.getAllRowCount(hql); // 总记录数
}
@Override
public List<Stessay> queryForPage(Stessay stessay, String hql, int offset,
int length) {
// TODO Auto-generated method stub
return stessayDao.queryForPage(hql, offset, length);
}

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

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

具体方法的实现交给DaoImpl:

 /**
* 查询所有的记录数
* @param hql 查询条件
* @return 总记录数
*/
@Override
public int getAllRowCount(String hql) {
return this.getHibernateTemplate().find(hql).size();
}
/**
* 分页查询
* @param hql 查询条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return 查询的记录集合
*/
@Override
public List<Stessay> queryForPage(final String hql, final int offset, final int length) {
Session session = this.getSession();
Query q = session.createQuery(hql);
q.setFirstResult(offset);
q.setMaxResults(length);
List<Stessay> list = q.list(); System.out.println("--------PaperImpl---------------size() "+list.size());
session.close();
return list;
}

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

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

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

    今天项目内容已经开始了,并且已经完成好多基本操作,今天就开始总结今天学习到的内容,和我遇到的问题,以及分析这其中的原因. 内容模块: 1:Java代码实现对数据库的增删查: 2:分页且获取页面信息: ...

  2. 亿级别记录的mongodb分页查询java代码实现

    1.准备环境 1.1 mongodb下载 1.2 mongodb启动 C:\mongodb\bin\mongod --dbpath D:\mongodb\data 1.3 可视化mongo工具Robo ...

  3. java常用公共代码二之分页代码的实现

    在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!! 二.分页代码实现:在项目中,分页是一个项目中必不可少的,它可以防止我们从数据 ...

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

    真分页这个词对程序猿们来说,并不是一个陌生的词汇,但是如果你是初次学习真分页,或许还是得花点时间小小研究下,下面是之前去转盘网(喜欢的可以看看,也可以进入引擎模式)的真分页js部分代码,html部分的 ...

  5. 菜鸟学Java(十)——分页查询

    今天继续跟大家说说一些非常基础的东西,这次我们说说分页查询.说到分页,可能很多人都听说过什么真分页.假分页的.简单解释一下,拿第二页,每页20条为例:真分:数据库里取 的就是21-40条:假分:数据库 ...

  6. [小技巧]让你的GridView支持IQueryable,并自动实现真分页

    众所周知,asp.net自带的GridView在自带分页方面设计得很2,因为它是假分页,即内存分页.而且它不智能支持强大的Iqueryable. 但这表明微软忽略了现实中的分页需求吗?答案应该不是,我 ...

  7. Unity3D研究院之打开Activity与调用JAVA代码传递参数

    原地址:http://www.xuanyusong.com/archives/667    Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发 ...

  8. AspNetPager实现真分页+多种样式

    真假分页 分页是Web应用程序中最常用到的功能之一.当从数据库中获取的记录远远超过界面承载能力的时候,使用分页可以使我们的界面更加美观,更加的用户友好.分页包括两种类型:真分页和假分页. 其中假分页就 ...

  9. Jsp分页实例---真分页

    网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...

随机推荐

  1. PHP成随机字符串

    生成随机字符串 /** * 随机字符串 * @param int $len * @return string */ function randomStr($len = 32) { $chars = & ...

  2. html颜色实体符号表示汇总

    颜色的表示方法有许多种,列如black,#000000,rgb(0,0,0)都表示黑色.这三种表示方法分别为英文,十六进制,rgb格式.拥有下列颜色,足以使你的网页充满生机. 颜色名 十六进制颜色值 ...

  3. (转)想从事游戏开发,1 年内能精通 C++ 吗,还需要学习什么?

    本人大约从20多年前开始学习及使用C++,但仍未达到我认为「精通」的阶段,甚至对于C++11的各种新特性也未掌握.然而因为我是在读书时自学C++的,也是游戏程序员(原问题中提到题主想从事游戏开发),觉 ...

  4. thinkPHP5.0 save和saveAll,新增和更新的问题

    今天遇到一个问题,在模型中使用save保存数据之后,使用saveAll继续新增数据,结果报 缺少更新条件,网上搜了下发现一篇文章https://www.jianshu.com/p/1848f61de6 ...

  5. 最小生成数kruskal算法和prim算法

    定义 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图. 连通网:在 ...

  6. POJ 3581 三段字符串(后缀数组)

    Sequence Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7923   Accepted: 1801 Case Tim ...

  7. spark&dataframe

    1.今天,我们来介绍spark以及dataframe的相关的知识点,但是在此之前先说一下对以前的hadoop的一些理解 当我启动hadoop的时候,上面有hdfs的存储结构,由于这个是分布式存储,所以 ...

  8. 10,before_request 和 after_request

    Flask我们已经学习很多基础知识了,现在有一个问题 我们现在有一个 Flask 程序其中有3个路由和视图函数,如下: from flask import Flask app = Flask(__na ...

  9. 通过Aspose.Word和ZXING生成复杂的WORD表格

    1.前言 这是我之前做的一个项目中要求的功能模块,它的需求是生成一个WORD文档,需要每页一个表格并且表格中需要插入文字.条形码和二维码等信息,页数可控制.具体的效果如下图所示: 可以看到有以下几点是 ...

  10. Java线程和多线程(六)——守护线程

    当我们在Java中创建线程的时候,这个线程在默认的情况下是一个用户线程,并且,如果这个线程在运行,那么JVM就不会终结这个应用.和用户线程不同,当一个线程被标记为守护线程的时候,JVM在用户线程结束的 ...