欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring MVC+MyBatis+MySQL实现分页功能实例

程序员文章站 2023-12-17 09:24:40
前言 最近因为工作的原因,在使用ssm框架实现一个商品信息展示的功能,商品的数据较多,不免用到分页,查了一番mybatis分页的做法,终于是实现了,在这里记录下来分享给大...

前言

最近因为工作的原因,在使用ssm框架实现一个商品信息展示的功能,商品的数据较多,不免用到分页,查了一番mybatis分页的做法,终于是实现了,在这里记录下来分享给大家,下面来一起看看详细的介绍:

方法如下: 

首先写一个分页的工具类,定义当前页数,总页数,每页显示多少等属性。

/** 
 * 分页 工具类 
 */ 
public class page implements serializable { 
 private static final long serialversionuid = -2213069645383858323l; 
 private int pagenow = 1; // 当前页数 
 private int pagesize = 4; // 每页显示记录的条数 
 private int totalcount; // 总的记录条数 
 private int totalpagecount; // 总的页数 
 private int startpos; // 开始位置,从0开始 
 private boolean hasfirst;// 是否有首页 
 private boolean haspre;// 是否有前一页 
 private boolean hasnext;// 是否有下一页 
 private boolean haslast;// 是否有最后一页 
 /** 
  * 通过构造函数 传入 总记录数 和 当前页 
  * @param totalcount 
  * @param pagenow 
  */ 
 public page(int totalcount, int pagenow) { 
  this.totalcount = totalcount; 
  this.pagenow = pagenow; 
 } 
 /** 
  * 取得总页数,总页数=总记录数/总页数 
  * @return 
  */ 
 public int gettotalpagecount() { 
  totalpagecount = gettotalcount() / getpagesize(); 
  return (totalcount % pagesize == 0) ? totalpagecount 
    : totalpagecount + 1; 
 } 
 public void settotalpagecount(int totalpagecount) { 
  this.totalpagecount = totalpagecount; 
 } 
 public int getpagenow() { 
  return pagenow; 
 } 
 public void setpagenow(int pagenow) { 
  this.pagenow = pagenow; 
 } 
 public int getpagesize() { 
  return pagesize; 
 } 
 public void setpagesize(int pagesize) { 
  this.pagesize = pagesize; 
 } 
 public int gettotalcount() { 
  return totalcount; 
 } 
 public void settotalcount(int totalcount) { 
  this.totalcount = totalcount; 
 } 
 /** 
  * 取得选择记录的初始位置 
  * @return 
  */ 
 public int getstartpos() { 
  return (pagenow - 1) * pagesize; 
 } 
 public void setstartpos(int startpos) { 
  this.startpos = startpos; 
 } 
 /** 
  * 是否是第一页 
  * @return 
  */ 
 public boolean ishasfirst() { 
  return (pagenow == 1) ? false : true; 
 } 
 public void sethasfirst(boolean hasfirst) { 
  this.hasfirst = hasfirst; 
 } 
 /** 
  * 是否有首页 
  * @return 
  */ 
 public boolean ishaspre() { 
  // 如果有首页就有前一页,因为有首页就不是第一页 
  return ishasfirst() ? true : false; 
 } 
 public void sethaspre(boolean haspre) { 
  this.haspre = haspre; 
 } 
 /** 
  * 是否有下一页 
  * @return 
  */ 
 public boolean ishasnext() { 
  // 如果有尾页就有下一页,因为有尾页表明不是最后一页 
  return ishaslast() ? true : false; 
 } 
 
 public void sethasnext(boolean hasnext) { 
  this.hasnext = hasnext; 
 } 
 /** 
  * 是否有尾页 
  * @return 
  */ 
 public boolean ishaslast() { 
  // 如果不是最后一页就有尾页 
  return (pagenow == gettotalcount()) ? false : true; 
 } 
 
 public void sethaslast(boolean haslast) { 
  this.haslast = haslast; 
 } 
} 

接着mapper接口中定义分类的方法

Spring MVC+MyBatis+MySQL实现分页功能实例

传入两个参数,分别是开始页和每页显示记录的条数。 

mapper的映射文件中的sql分页语句

<select id="findpages" resulttype="com.dh15.pojo.goods"> 
  select g.id,g.name,g.price,g.num,c.class_name,g.pic,g.des from tb_goods g,tb_class c 
  where g.class_id=c.cid limit #{startpos},#{pagesize} 
</select> 

接着在控制类(controller)中查询商品,同时进行分页。

查询商品方法

/** 
  * 查询商品信息,实现分页 
  * @param goods 
  * @return 
  * @throws exception 
  */ 
 @requestmapping("/querypages") 
 public string querypages(httpservletrequest request, model model) throws exception { 
  string pagenow = request.getparameter("pagenow"); 
  page page = null; 
  list<goods> goods = new arraylist<goods>(); 
  int totalcount = (int) service.getgoodscount(1); 
  if (pagenow != null) { 
   page = new page(totalcount, integer.parseint(pagenow)); 
   goods = this.service.findpages(page.getstartpos(), page.getpagesize()); 
  } else { 
   page = new page(totalcount, 1); 
   goods = this.service.findpages(page.getstartpos(), page.getpagesize()); 
  } 
  model.addattribute("goods_list", goods); 
  model.addattribute("page", page); 
  return "goods/fenyetest"; 
 } 

这里需要注意一下,遍历商品时没有点击页数,所以当前页默认是空的,这里要在方法里面进行判断,如果pagenow为空,传一个1到构造函数,否则会报空指针。

最后,在jsp页面显示查询的商品列表,同时实现点击上一页,下一页,首页,尾页等常见分页中的操作

<%@ page language="java" contenttype="text/html; charset=utf-8" 
 pageencoding="utf-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>商品查询列表</title> 
</head> 
<body> 
 
 <table width="100%" border=1> 
  <tr> 
   <td>选择</td> 
   <td>商品名称</td> 
   <td>商品价格</td> 
   <td>生产数量</td> 
   <td>商品类别</td> 
   <td>商品图片</td> 
   <td>商品信息</td> 
   <td>操作</td> 
  </tr> 
  <c:foreach items="${goods_list }" var="item"> 
   <tr> 
    <td>${item.id}<input type="hidden" name="id" value="${item.id}" /></td> 
    <td>${item.name }</td> 
    <td>${item.price }</td> 
    <td>${item.num }</td> 
    <td>${item.classinfo.class_name }</td> 
    <td><img style="width:110px;height:120px" alt="商品图片" 
     src="http://localhost/pic/${item.pic }"></td> 
    <td>${item.des }</td> 
    <td> 
    <a href="${pagecontext.request.contextpath }/findgoodsbyid.action?id=${item.id}" rel="external nofollow" >修改</a> 
    <a href="${pagecontext.request.contextpath }/delgoods.action?id=${item.id}" rel="external nofollow" >删除</a> 
    </td> 
   </tr> 
  </c:foreach> 
 </table> 
 <div align="center"> 
   <font size="2">第 
   ${page.pagenow} 页</font> <a href="querypages.action?pagenow=1" rel="external nofollow" rel="external nofollow" >首页</a> 
  <c:choose> 
   <c:when test="${page.pagenow - 1 > 0}"> 
    <a href="querypages.action?pagenow=${page.pagenow - 1}" rel="external nofollow" >上一页</a> 
   </c:when> 
   <c:when test="${page.pagenow - 1 <= 0}"> 
    <a href="querypages.action?pagenow=1" rel="external nofollow" rel="external nofollow" >上一页</a> 
   </c:when> 
  </c:choose> 
  <c:choose> 
   <c:when test="${page.totalpagecount==0}"> 
    <a href="querypages.action?pagenow=${page.pagenow}" rel="external nofollow" rel="external nofollow" >下一页</a> 
   </c:when> 
   <c:when test="${page.pagenow + 1 < page.totalpagecount}"> 
    <a href="querypages.action?pagenow=${page.pagenow + 1}" rel="external nofollow" >下一页</a> 
   </c:when> 
   <c:when test="${page.pagenow + 1 >= page.totalpagecount}"> 
    <a href="querypages.action?pagenow=${page.totalpagecount}" rel="external nofollow" rel="external nofollow" >下一页</a> 
   </c:when> 
  </c:choose> 
  <c:choose> 
   <c:when test="${page.totalpagecount==0}"> 
    <a href="querypages.action?pagenow=${page.pagenow}" rel="external nofollow" rel="external nofollow" >尾页</a> 
   </c:when> 
   <c:otherwise> 
    <a href="querypages.action?pagenow=${page.totalpagecount}" rel="external nofollow" rel="external nofollow" >尾页</a> 
   </c:otherwise> 
  </c:choose> 
 </div> 
</body> 
</html> 

最终效果图:

Spring MVC+MyBatis+MySQL实现分页功能实例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

上一篇:

下一篇: