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>

页面效果:

springmvc4+hibernate4分页查询功能的更多相关文章

  1. 用Java实现异构数据库的高效通用分页查询功能

    不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...

  2. 不需要JAVAScript完成分页查询功能

    分页查询之前已经说过,现在用另一种方法实现,换汤不换药.但是更简单. view层代码: 控制层代码: 业务逻辑层,主要看一下方法count1()的代码: count1()方法的功能就是控制翻页,如果传 ...

  3. 基于InfluxDB实现分页查询功能

    InfluxDB作为时序数据库中的翘楚,应用范围非常广泛,尤其在监控领域. 最近做了一个功能,将InfluxDB中的数据查询出来后,在前台分页展现,比如每页10条,一共100页,可以查看首页.末页,进 ...

  4. Kotlin实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果)

    随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Kotlin在各类编程语言中的排名比较靠后(据TIOBE发布了 19 年 8 月份的编程语言排行榜,Kot ...

  5. 通过javascript完成分页查询功能

    主要思路: 实现分页查询的关键是设置一个页面的最大数据行数和开始行号,代码如下: 最大行数我们设置为常量,不必纠结于他,所以关键就是如何把起始行号设置为变量,让他随着我们点击[上一页]或[下一页]而改 ...

  6. JQuery滚动分页查询功能

    //获取滚动条的高度 function getScrollTop() { var scrollTop = 0; if (document.documentElement && docu ...

  7. [.NET] SQL数据分页查询

    [.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  8. springmvc+spring+mybatis分页查询实例版本1,ver1.0

    无聊做做看看,几乎没有怎么仔细做过这方面的,总是以为很简单,想想就会,实际做起来结合工作经验感觉还是挺有收获的,可以用在自己的项目上 第一版本思路:框架使用ssm,这个无所谓,采用分页语句查询指定页面 ...

  9. 分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

             分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...

随机推荐

  1. wpf-DataTemplate应用

    在WPF中,决定数据外观的是DataTemplate,即DataTemplate是数据内容的表现形式,一条数据显示成什么样子,是简单的文本还是直观的图形,就是由DataTemplate决定的.下面通过 ...

  2. .net程序开发人员必看的变量的命名规则

    (1)类名.属性名.方法名采用Pascal命名,如 class User { } interface IEditable { } bool ValidateInput() public int Age ...

  3. document.onclick vs window.onclick

    The JavaScript Window object is the highest level JavaScript object which corresponds to the web bro ...

  4. Errore HTTP 404.2 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理

    解决方法: 找到IIS的根节点->右侧“ISAPI和CGI限制”->把禁止的ASP.Net版本项设置为允许. 如下图 今天配置本地iis出现了一些问题,第一个是出现cgi等错误,iis重新 ...

  5. 新Android学习计划

    最近,在学习Android Design Support Library提供的新控件过程中,我感受到了原来的学习方式的缺点: 学习内容过于随意,在工作过程中碰到的新问题都想去掌握,心血来潮就想写一篇相 ...

  6. iOS基础框架的搭建 / 及国际化操作

    1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...

  7. js动态加载html,加载后的页面元素某些事件失效的解决方案

    用 live 来绑定 例如: $("#items li .addToCartimg").live("click",function(){ $('.popDeta ...

  8. Access中的SELECT @@IDENTITY

    在Access数据库中存在select @@identity吗?答案是肯定的.但是Access一次只能执行一条SQL,多条SQL需要多次执行,这是限制.在SQL Server中,可以一次执行多条SQL ...

  9. (原)torch中微调某层参数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6221664.html 参考网址: https://github.com/torch/nn/issues ...

  10. Python新手学习基础之条件语句——if/else语句

    if/else语句 条件语句实际在前面的文章里我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,条件语句是通过对一条或多条语句判断的返回结果(True或False)来选择执行下一步命令的,比 ...