在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. Apache+Tomcat+jk windows环境下的集群部署

    记一次在Windows服务器上搭建apatch+tomcat+jk的集群搭建过程,其中也遇到了很多问题,总结一下. 一.准备工作 1.apache-tomcat-7.0.88 2.Apche http ...

  2. PHP获取异常信息

    try { } catch (\Exception $e) { $extra = [ 'code' => $e->getCode(), 'msg' => $e->getMess ...

  3. Git的基本命令介绍

    Git的安装 进入官网下载系统所需要的版本  官网地址:https://git-scm.com/downloads 点击下载按钮官方网站一般会根据操作系统的自动下载所需要的Git版本. 下载完成后,点 ...

  4. 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接

    最近的一个项目碰到这种问题,摸索出了解决办法,故此记录下 example 如果控制器为 ShopCollect 方法为 UserList solution 请求的链接应该为 doman.com/sho ...

  5. 1014-34-首页15-计算原创微博的frame------计算cell的高度---计算 UILabel 的 CGSize 的方法

    一.总体思路: 在控制器中,每次拿到数据模型(请求了数据.加载新微博)的时候,就调用 - (NSArray *)stausFramesWithStatuses:(NSArray *)statuses, ...

  6. c++ function和bind

    bind 定义在头文件 functional 里 template<typename _Func, typename... _BoundArgs> inline typename _Bin ...

  7. 牛客网暑期ACM多校训练营(第四场) F Beautiful Garden

    链接: https://www.nowcoder.com/acm/contest/142/F 题意: n x m的矩形,选个p x q的矩形去掉,两个矩形中⼼重合,去掉后的矩形上下左右对称 求(p, ...

  8. 3687: 简单题(bitset)

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 700  Solved: 319[Submit][Status][Discuss] ...

  9. PJMEDIA之录音器的使用(capture sound to avi file)

    为了熟悉pjmedia的相关函数以及使用方法,这里练习了官网上的一个录音器的例子. 核心函数: pj_status_t pjmedia_wav_writer_port_create ( pj_pool ...

  10. 剑指Offer - 九度1505 - 两个链表的第一个公共结点

    剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...