springmvc4+hibernate4分页查询功能实现
作者:虞秀权 发布时间:2021-08-16 02:28:08
标签:springmvc4,分页查询
Springmvc+hibernate成为现在很多人用的框架整合,最近自己也在学习摸索,由于我们在开发项目中很多项目都用到列表分页功能,在此参考网上一些资料,以springmvc4+hibnerate4边学边总结,得出分页功能代码,虽然不一定通用,对于初学者来说有参考价值。
分页实现的基本过程:
一、分页工具类
思路:
1.编写Page类,定义属性,应该包括:查询结果集合、查询记录总数、每页显示记录数、当前第几页等属性。
2.编写Page类,定义方法,应该包括:总页数、当前页开始记录、首页、下一页、上一页、末页等方法
代码如下:
package cn.myic.model;
import java.util.List;
public class Page<E> {
// 结果集
private List<E> list;
// 查询记录总数
private int totalRecords;
// 每页多少条记录
private int pageSize;
// 第几页
private int pageNo;
/**
* @return 总页数
* */
public int getTotalPages(){
return (totalRecords+pageSize-1)/pageSize;
}
/**
* 计算当前页开始记录
* @param pageSize 每页记录数
* @param currentPage 当前第几页
* @return 当前页开始记录号
*/
public int countOffset(int currentPage,int pageSize){
int offset = pageSize*(currentPage-1);
return offset;
}
/**
* @return 首页
* */
public int getTopPageNo(){
return 1;
}
/**
* @return 上一页
* */
public int getPreviousPageNo(){
if(pageNo<=1){
return 1;
}
return pageNo-1;
}
/**
* @return 下一页
* */
public int getNextPageNo(){
if(pageNo>=getBottomPageNo()){
return getBottomPageNo();
}
return pageNo+1;
}
/**
* @return 尾页
* */
public int getBottomPageNo(){
return getTotalPages();
}
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
二、Dao层方法
思路:定义一个分页查询的方法,设置参数:当页页号和每页显示多少条记录
代码如下:
/**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return 返回查询记录集合
*/
@SuppressWarnings("unchecked")
@Override
public List<Course> queryForPage(int offset, int length) {
// TODO Auto-generated method stub
List<Course> entitylist=null;
try{
Query query = getSession().createQuery("from Course");
query.setFirstResult(offset);
query.setMaxResults(length);
entitylist = query.list();
}catch(RuntimeException re){
throw re;
}
return entitylist;
}
三、Service层方法
思路:
1.定义一个分页查询的方法,设置参数:当页页号和每页显示多少条记录,返回查询结果的分页类对象(Page)
2.通过Dao层,获取查询实体的总记录数
3.获取当前页开始记录数
4.通过Dao层,获取分页查询结果集
5.Set入page对象
代码如下:
/**
* 分页查询
* @param currentPage 当前页号:现在显示的页数
* @param pageSize 每页显示的记录条数
* @return 封闭了分页信息(包括记录集list)的Bean
* */
@SuppressWarnings("unchecked")
@Override
public Page queryForPage(int currentPage,int pageSize) {
// TODO Auto-generated method stub
Page page = new Page();
//总记录数
int allRow = courseDao.getAllRowCount();
//当前页开始记录
int offset = page.countOffset(currentPage,pageSize);
//分页查询结果集
List<Course> list = courseDao.queryForPage(offset, pageSize);
page.setPageNo(currentPage);
page.setPageSize(pageSize);
page.setTotalRecords(allRow);
page.setList(list);
return page;
}
四、Controller层方法
Controller层的设计,操作翻页查询时,只需要传递当前页号参数即可。
代码如下:
@RequestMapping(value = "/showAll.do")
public String findAllCourse(HttpServletRequest request,
HttpServletResponse response) {
try {
String pageNo = request.getParameter("pageNo");
if (pageNo == null) {
pageNo = "1";
}
Page page = courseService.queryForPage(Integer.valueOf(pageNo), 10);
request.setAttribute("page", page);
List<Course> course = page.getList();
request.setAttribute("courses", course);
} catch (Exception e) {
e.printStackTrace();
}
return "course/course_list";
}
五、View层jsp展示
jsp页面分页的几个按钮,根据当前页号的判断显示。
代码如下:
<tr>
<td colspan="6" align="center" bgcolor="#5BA8DE">共${page.totalRecords}条记录 共${page.totalPages}页 当前第${page.pageNo}页<br>
<a href="${path}/course/showAll.do?pageNo=${page.topPageNo }"><input type="button" name="fristPage" value="首页" /></a>
<c:choose>
<c:when test="${page.pageNo!=1}">
<a href="${path}/course/showAll.do?pageNo=${page.previousPageNo }"><input type="button" name="previousPage" value="上一页" /></a>
</c:when>
<c:otherwise>
<input type="button" disabled="disabled" name="previousPage" value="上一页" />
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${page.pageNo != page.totalPages}">
<a href="${path}/course/showAll.do?pageNo=${page.nextPageNo }"><input type="button" name="nextPage" value="下一页" /></a>
</c:when>
<c:otherwise>
<input type="button" disabled="disabled" name="nextPage" value="下一页" />
</c:otherwise>
</c:choose>
<a href="${path}/course/showAll.do?pageNo=${page.bottomPageNo }"><input type="button" name="lastPage" value="尾页" /></a>
</td>
</tr>
页面效果:
来源:http://www.cnblogs.com/luihengk/p/5248041.html


猜你喜欢
- Java Exception 捕获和显示实例详解 在进行Java B/S架构开发时,经常有这样的场景:后端处理业务逻辑,前端负责
- 序本文主要研究下在带有lombok(1.16.20版本)注解的代码在java10下的编译问题。问题Fatal error compiling
- 将方形的图像映射到正方形上似乎并没有什么难度,所以接下来要做的是把图像映射到球面上。而球的参数方程为x=rcosϕcos&theta
- 一、图片预览:一、实现功能:需求要实现布局中为圆形图片,图片背景与图标分开且合并到一个ImageView。二、具体实现:XML中布局中定义I
- TestCar.javapublic class TestCar { public static voi
- 1. 确保你项目能编译通过,安装java jdk 环境填写环境变量2. 添加SpringBootServletInitializer的子类重
- GlobalLock的作用对于某条数据进行更新操作,如果全局事务正在进行,当某个本地事务需要更新该数据时,需要使用@GlobalLock确保
- 看一段程序String t = "a||b||c||d";String[] temp = t.split("\
- 前言基于 C# 的 图表控件库 ScottPlot,开源免费,可以用于开发一些上位机软件,如电压、电流波形的显示,开发【示波器】图形界面,可
- 1 前言为什么我们在使用SpringBoot框架开发Java Web应用需要引入大量的starter?例如,我们引入Redis就在Maven
- jstack - Prints Java thread stack traces for a Java process, core file
- Android ScrollView无法填充满屏幕的解决办法ScrollView滚动视图是指当拥有很多内容、屏幕显示不完时、需要通过滚动跳来
- ssm mybatis配置多个mapper目录通配符配置比如目录的结构如下:com/test/web/user/mappercom/test
- 下面介绍的这个版本搭配是我研究好久好久才跑通的,这在我的电脑上是一组可行的配置,如果你使用了同样的配置跑不通,那可能是环境中某一部分还是有不
- 前面关于spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那
- 时间处理相关类:1.java.util.Date:时间类2.java.text.DateFormat:时间格式化类(抽象类),实现类:jav
- 动态数组ArrayList类在System.Collecions的命名空间下,所以使用时要加入System.Collecions命名空间,而
- 一. 什么是Spring SecuritySpring Security是Spring家族的一个安全管理框架, 相比于另一个安全框架Shir
- 委托(delegate)是一种可以把引用存储为函数的类型,这类似于c++中的函数指针。回调函数c++中的回调函数,就是用函数指针来实现的。类
- 传统的单例写法解决了什么问题首先,在大多数情况下(不包含面试),传统的单例写法已经完全够用了。通过 synchronized 关键字解决了多