Java代码实现真分页
在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代码实现真分页的更多相关文章
- Java代码实现 增删查 + 分页——实习第四天
		今天项目内容已经开始了,并且已经完成好多基本操作,今天就开始总结今天学习到的内容,和我遇到的问题,以及分析这其中的原因. 内容模块: 1:Java代码实现对数据库的增删查: 2:分页且获取页面信息: ... 
- 亿级别记录的mongodb分页查询java代码实现
		1.准备环境 1.1 mongodb下载 1.2 mongodb启动 C:\mongodb\bin\mongod --dbpath D:\mongodb\data 1.3 可视化mongo工具Robo ... 
- java常用公共代码二之分页代码的实现
		在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!! 二.分页代码实现:在项目中,分页是一个项目中必不可少的,它可以防止我们从数据 ... 
- 网站真分页js代码该怎么写?
		真分页这个词对程序猿们来说,并不是一个陌生的词汇,但是如果你是初次学习真分页,或许还是得花点时间小小研究下,下面是之前去转盘网(喜欢的可以看看,也可以进入引擎模式)的真分页js部分代码,html部分的 ... 
- 菜鸟学Java(十)——分页查询
		今天继续跟大家说说一些非常基础的东西,这次我们说说分页查询.说到分页,可能很多人都听说过什么真分页.假分页的.简单解释一下,拿第二页,每页20条为例:真分:数据库里取 的就是21-40条:假分:数据库 ... 
- [小技巧]让你的GridView支持IQueryable,并自动实现真分页
		众所周知,asp.net自带的GridView在自带分页方面设计得很2,因为它是假分页,即内存分页.而且它不智能支持强大的Iqueryable. 但这表明微软忽略了现实中的分页需求吗?答案应该不是,我 ... 
- Unity3D研究院之打开Activity与调用JAVA代码传递参数
		原地址:http://www.xuanyusong.com/archives/667 Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发 ... 
- AspNetPager实现真分页+多种样式
		真假分页 分页是Web应用程序中最常用到的功能之一.当从数据库中获取的记录远远超过界面承载能力的时候,使用分页可以使我们的界面更加美观,更加的用户友好.分页包括两种类型:真分页和假分页. 其中假分页就 ... 
- Jsp分页实例---真分页
		网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ... 
随机推荐
- Apache+Tomcat+jk           windows环境下的集群部署
			记一次在Windows服务器上搭建apatch+tomcat+jk的集群搭建过程,其中也遇到了很多问题,总结一下. 一.准备工作 1.apache-tomcat-7.0.88 2.Apche http ... 
- PHP获取异常信息
			try { } catch (\Exception $e) { $extra = [ 'code' => $e->getCode(), 'msg' => $e->getMess ... 
- Git的基本命令介绍
			Git的安装 进入官网下载系统所需要的版本 官网地址:https://git-scm.com/downloads 点击下载按钮官方网站一般会根据操作系统的自动下载所需要的Git版本. 下载完成后,点 ... 
- 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
			最近的一个项目碰到这种问题,摸索出了解决办法,故此记录下 example 如果控制器为 ShopCollect 方法为 UserList solution 请求的链接应该为 doman.com/sho ... 
- 1014-34-首页15-计算原创微博的frame------计算cell的高度---计算 UILabel 的 CGSize 的方法
			一.总体思路: 在控制器中,每次拿到数据模型(请求了数据.加载新微博)的时候,就调用 - (NSArray *)stausFramesWithStatuses:(NSArray *)statuses, ... 
- c++ function和bind
			bind 定义在头文件 functional 里 template<typename _Func, typename... _BoundArgs> inline typename _Bin ... 
- 牛客网暑期ACM多校训练营(第四场) F Beautiful Garden
			链接: https://www.nowcoder.com/acm/contest/142/F 题意: n x m的矩形,选个p x q的矩形去掉,两个矩形中⼼重合,去掉后的矩形上下左右对称 求(p, ... 
- 3687: 简单题(bitset)
			3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 700 Solved: 319[Submit][Status][Discuss] ... 
- PJMEDIA之录音器的使用(capture sound to avi file)
			为了熟悉pjmedia的相关函数以及使用方法,这里练习了官网上的一个录音器的例子. 核心函数: pj_status_t pjmedia_wav_writer_port_create ( pj_pool ... 
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
			剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ... 
