spring mvc mysql分页查询_使用Spring MVC与Mybatis如何对Mysql数据库进行分页查询

使用Spring MVC与Mybatis如何对Mysql数据库进行分页查询

发布时间:2020-12-01 17:37:06

来源:亿速云

阅读:71

作者:Leah

使用Spring MVC与Mybatis如何对Mysql数据库进行分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

第一步,搭建这个小案例,引入spring和mybtis的jar包,配置对应的配置文件:

d118b3fc47a35e1fa04b36c68a9d0f6f.png

第二步,前端页面和数据的处理:

页面布局很简单。我将table和pager单独作为对象来处理,各自处理各自该干的事情,做到了很好的封装处理。个人认为这两个js和java的类很相似。

其它的地方都是按照正常分页的流程走的,话不多说,看看代码吧。

HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

.hide{display:none}

.myPager{height:40px;border-bottom:1px solid #eee;}

.myPager .pagerRow{width:100%;float:left;height:30px;margin-top:10px;}

.myPager .showPage{width:100%;float:left;height:30px;margin-top:10px;text-align: left;}

.myPager .showPage .numDiv{display:inline-block;}

.myPager .showPage .toBtn{color:#fff;font-size:20px;}

.myPager .showPage .disable{background-color: #c9c9c9;}

.myPager .showPage .nable{background-color:rgb(10%,65%,85%);cursor:default;}

.myPager .showPage .numDiv .disable{color:#777;}

.myPager .showPage .numDiv .nable{color:#fff;}

.myPager .showPage .cursor_default{cursor:default;}

.myPager .showPage .cursor_pointer{cursor:pointer;}

.showPage span{display: inline-block;padding: 0px 0px 1px 1px;margin-left:5px;

width: 21px;height: 21px;border-radius: 12px;line-height: 22px;font-size: 12px;

text-align: center;overflow: hidden;}

">

">

">

$(function(){

var $btn = $(".sub_btn");

$btn.click(function(){

$(this).addClass("hide");

new MyTable("employeeTab","");

})

})

ID姓名年龄性别

显示数据

页面引入了Mypager.js和MyTable.js,Mypager这套东西是封装的比较好的,有兴趣的朋友可以直接拿去用。现在插件满天飞,自己造的轮子肯定会逊色很多,但是这里涉及到js很多基础的知识点,初学的朋友可以当做学习参考使用;Pager.getSpan = function(value,className){

return $(""+value+"");

}

function Pager($parent){

this.$parent = $parent;

this.pageCallBack = $.noop;

this.preVal = "<";

this.nextVal = ">";

this.splitChar = "…";

this.init();

this.spaceStep = 2;

}

Pager.prototype.setPageCallBack = function(pageCallBack){

this.pageCallBack = pageCallBack;

return this;

}

Pager.prototype.init = function(){

if(this.$parent.length == 0){

alert("pagediv not exists ");

}

this.$divRow = $("

this.$div = $("

").appendTo(this.$parent);

}

Pager.prototype.clear = function(){

this.$div.empty();

this.$divRow.empty();

}

Pager.prototype.addSpan = function(value,className){

var $span = Pager.getSpan(value,className).appendTo(this.$numdiv);

$span.css("width",this.getSpanWidth(value)+"px");

return $span;

}

Pager.prototype.getSpanWidth = function(value){

var width = 21;

var curNeed = 0;

if(!isNaN(value)){

curNeed = value.toString().length * 8;

}

return curNeed>width?curNeed:width;

}

Pager.prototype.disable = function($span,flag){

var removeClass = flag?"nable cursor_pointer":"disable cursor_default";

var addClass = flag?"disable cursor_default":"nable cursor_pointer";

$span.removeClass(removeClass).addClass(addClass);

return $span;

}

Pager.prototype.show = function(pageCount,curPage,rowCount){

alert(0)

this.clear();

this.$divRow.html("  共有"+pageCount+"页,"+rowCount+"条数据");

pageCount = pageCount?pageCount-0:0;

if(pageCount<=0){

return;

}

var self = this;

this.$prev = Pager.getSpan(this.preVal,"toBtn").appendTo(this.$div);

this.$numdiv = $("

this.$nextVal = Pager.getSpan(this.nextVal,"toBtn").appendTo(this.$div);

curPage = curPage?curPage-0:1;

curPage = curPage<1?1:curPage;

curPage = curPage>pageCount?pageCount:curPage;

this.disable(this.$prev,curPage == 1);

if(curPage>1){

this.$prev.click(function(){

self.pageCallBack(curPage-1);

});

}

this.disable(this.$nextVal,curPage == pageCount);

if(curPage

this.$nextVal.click(function(){

self.pageCallBack(curPage+1);

});

}

var steps = this.getSteps(pageCount,curPage);

for(var i in steps){

if(i == curPage){

this.addSpan(steps[i],"nable");

continue;

}

if(steps[i] == this.splitChar){

this.addSpan(steps[i]);

continue;

}

this.addSpan(steps[i],"disable").hover($.proxy(this.mouseover,this),$.proxy(this.mouseout,this))

.click(function(){

alert(0)

self.pageCallBack($(this).html());

});

}

}

Pager.prototype.mouseout = function(e){

var $span = $(e.target);

this.disable($span,true);

}

Pager.prototype.mouseover = function(e){

var $span = $(e.target);

this.disable($span,false);

}

Pager.prototype.getSteps = function (pageCount,curPage){

var steps = {};

var curStar = curPage-3;

var curEnd = curPage+3;

for(var i=1;i<=pageCount;i++){

if((i>this.spaceStep && icurEnd && i

continue;

}

if((i==curStar && i>this.spaceStep) || (i==curEnd && i

steps[i]=this.splitChar;

continue;

}

steps[i]=i;

}

return steps;

}

下面是Mytable的实现代码:function MyTable(tabName,url){

this.$tab = $("."+tabName);

this.$wrap = this.$tab.parent();

this.queryURL = url;

this.queryData = null;

this.pager = null;

this.init();

}

MyTable.prototype.init = function(){

this.pager = new Pager($("

").insertAfter(this.$wrap))

.setPageCallBack($.proxy(this.gotoPage,this));

this.gotoPage(1);

}

MyTable.prototype.gotoPage = function(curPage){

if(curPage){

this.queryData = {"curPage":curPage};

}

$.post(this.queryURL,this.queryData,$.proxy(this.show,this),"json");

}

MyTable.prototype.show = function(data){

this.clear();

var list = data.list;

var len = list.length;

var df = document.createDocumentFragment();

for(var i=0;i

var $tr = $("

");

var $id = $("

"+list[i].id+"").appendTo($tr);

var $name = $("

"+list[i].name+"").appendTo($tr);

var $age = $("

"+list[i].age+"").appendTo($tr);

var $sex = $("

"+list[i].sex+"").appendTo($tr);

df.appendChild($tr[0]);

}

this.$tab[0].appendChild(df);

this.pager.show(data.pager.pageCount, data.pager.curPage, data.pager.rowCount);

}

MyTable.prototype.clear = function(){

this.$tab.empty();

}

前端页面的处理就是这些,展示效果如下:

6b1e4084ed7183210ade0b1dfdffbca9.png

第三步:后台的处理

后台的处理很简单,因为是自己写的数据,所以没有做太复杂的处理,首先我先把数据库的数据贴出来

cbe433637c6113efc899afe0e7563240.png

一共18条数据,四个字段,id为主键。下面是controller处理前端请求的代码:package cn.wangze.controller;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import cn.wangze.domain.Employee;

import cn.wangze.domain.Pager;

import cn.wangze.service.BaseService;

@Controller

@RequestMapping("/mam")

public class BaseController extends SuperController{

@Autowired

private BaseService baseService;

@RequestMapping(value="/queryListPage")

public void queryListPage(Employee employee, Pager pager, HttpServletResponse response){

if(employee == null || pager == null){

sendError("参数错误",response);

}

sendJsonPager(pager, baseService.queryListPage(employee,pager), response);

}

}

这个页面涉及到了前端返回值得处理,sendError和sendJsonPager方法在它的父类中有声明,代码如下:public void sendParam(boolean successFlag,Object key,Object value,HttpServletResponse response){

StringBuffer sb = append(null,SUCCESS,successFlag?SUCCESS:ERROR);

if(!isEmpty(key)){

append(sb,key,value);

}

if(!MESSAGE.equals(key)){

append(sb,MESSAGE,successFlag?"操作已成功":"操作以失败");

}

writeJsonBuffer(sb.append("}"),response);

}

public void sendMsg(boolean successFlag,String errmsg,HttpServletResponse response){

sendParam(successFlag,MESSAGE,errmsg,response);

}

public void sendError(String msg,HttpServletResponse response){

sendMsg(false,msg,response);

}public void sendJsonPager(Pager pager, List extends JsonEntity> list, int i, HttpServletResponse response){

StringBuffer sb = append(null, MESSAGE, "success");

if(list==null || list.size()==0){

sendMsg(false, "查无数据", response);

}else{

sb.append(",").append(getJsonList(list,i)).append(pager.toJsonString());

}

sb.append("}");

logger.debug(sb);

HtmlUtil.writer(response, sb.toString());

}

public void sendJsonPager(Pager pager, List extends JsonEntity> list, HttpServletResponse response){

sendJsonPager(pager, list, 0, response);

}

通过上面BaseController的处理,我们可以看到它调用了BaseService的queryListPager方法,package cn.wangze.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import cn.wangze.domain.Pager;

import cn.wangze.mapper.BaseMapper;

@Service

public class BaseService {

@Autowired

private BaseMapper baseMapper;

public Pager queryRowCount(T t, Pager pager){

return pager.initRowCount(baseMapper.queryRowCount(t));

}

public List queryListPage(T t, Pager pager){

pager = this.queryRowCount(t,pager);

if(pager == null) return null;

return baseMapper.queryListPage(t, pager.getPageSize(), pager.getStart());

}

}

BaseServie的queryRowCount方法先查询了一下数据的总条数,然后调用了BaseMapper的queryListPage方法,我们来看一下:package cn.wangze.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

public interface BaseMapper {

public int queryRowCount(T t);

public List queryListPage(@Param("t") T t,@Param("end") Integer end,@Param("start") Integer start);

}

这个BaseMapper对应的是mybatis的xml文件,它负责编写sql语句:<?xml  version="1.0" encoding="UTF-8"?>

mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

id,name,age,sex

t.id,t.name,t.age,t.sex

#{id},#{name},#{age},#{sex}

where 1=1

and id=#{id}

and name=#{name}

and age=#{age}

and sex=#{sex}

where 1=1

and t.id=#{t.id}

and t.name=#{t.name}

and t.age=#{t.age}

and t.sex=#{t.sex}

set

id=#{id},

name=#{name},

age=#{age},

sex=#{sex},

select count(1) from employee 

select  from employee limit #{start},#{end};

最后我们看下employee和pager的实体类把:package cn.wangze.domain;

public class Employee extends JsonEntity{

private int id;

private String name;

private String age;

private String sex;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public String getSalary() {

return sex;

}

public void setSalary(String sex) {

this.sex = sex;

}

@Override

protected void addJsonFields(int i) {

addField("id", id).addField("name",name).addField("age", age).addField("sex", sex);

}

@Override

public String toString() {

return "id:"+id+",name:"+name+",age:"+age+",sex:"+sex;

}

}package cn.wangze.domain;

public class Pager {

private int curPage = 1;

private int pageSize = 5;

private int start = 0;

private int end = 0;

private int pageCount;

private int rowCount;

public int getCurPage() {

return curPage;

}

public void setCurPage(int curPage) {

this.curPage = curPage;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getStart() {

return start;

}

public void setStart(int start) {

this.start = start;

}

public int getEnd() {

return end;

}

public void setEnd(int end) {

this.end = end;

}

public int getPageCount() {

return pageCount;

}

public void setPageCount(int pageCount) {

this.pageCount = pageCount;

}

public int getRowCount() {

return rowCount;

}

public void setRowCount(int rowCount) {

this.rowCount = rowCount;

}

public Pager initRowCount(int rowCount) {

if (rowCount == 0) {

return null;

}

int ps = getPageSize();

if (ps == 0) {

ps = 5;

}

int pc = (rowCount + ps - 1) / ps;//

int cp = getCurPage();

cp = cp > pc ? pc : cp;

cp = cp 

this.setPageCount(pc);

this.setCurPage(cp);

this.setEnd(cp * ps );

this.setStart((cp - 1) * ps);

this.rowCount = rowCount;

return this;

}

public StringBuffer toJsonString() {

return new StringBuffer(","+"\"pager\":{\"curPage\":\"" + this.curPage

+ "\",\"pageCount\":\"" + this.pageCount + "\",\"rowCount\":\""

+ this.rowCount + "\"}");

}

@Override

public String toString() {

return "Pager [curPage=" + curPage + ", pageSize=" + pageSize

+ ", start=" + start + ", end=" + end + ", pageCount="

+ pageCount + ", rowCount=" + rowCount + "]";

}

}

不知道你还记不记得在BaseService的处理方法里面调用了pager的initRowCount方法没,这个方法就是判断当前执行到第几页,从哪个数字开始,到那个数字结束,是分页查询里面一个很关键的方法。

看完上述内容,你们掌握使用Spring MVC与Mybatis如何对Mysql数据库进行分页查询的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给出以下的解答: Spring MVC框架中的分页查询通常可以借助于PageHelper插件来实现。PageHelper是MyBatis分页插件,它可以拦截MyBatis的查询操作,并在查询语句执行前自动添加分页相关的语句。使用PageHelper可以帮助我们轻松地实现分页查询功能。 以下是实现Spring MVC分页查询的步骤: 1. 引入PageHelper插件依赖。 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency> ``` 2. 在Spring MVC配置文件中配置PageHelper插件。 在Spring MVC配置文件中添加以下配置: ``` <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <value> dialect=mysql </value> </property> </bean> </array> </property> </bean> ``` 其中,dialect属性指定数据库类型,这里以MySQL为例。 3. 在Controller中编写分页查询方法。 在Controller中编写分页查询方法,例如: ``` @RequestMapping("/list") public ModelAndView list(@RequestParam(defaultValue="1") int pageNum, @RequestParam(defaultValue="10") int pageSize) { ModelAndView mv = new ModelAndView("list"); // 使用PageHelper进行分页查询 PageHelper.startPage(pageNum, pageSize); List<User> userList = userService.getUserList(); PageInfo<User> pageInfo = new PageInfo<User>(userList); mv.addObject("userList", userList); mv.addObject("pageInfo", pageInfo); return mv; } ``` 在这个方法中,我们使用PageHelper的startPage方法开始分页查询,然后调用userService的getUserList方法获取用户列表,最后将查询结果和分页信息添加到ModelAndView中返回。 4. 在JSP页面中显示分页查询结果。 在JSP页面中显示分页查询结果,例如: ``` <table> <thead> <tr> <th>ID</th> <<th>Name</th> <th>Age</th> </tr> </thead> <tbody> <c:forEach items="${userList}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.age}</td> </tr> </c:forEach> </tbody> </table> <div> <c:if test="${pageInfo.pages > 1}"> <c:url value="/user/list" var="url"> <c:param name="pageNum" value="${pageInfo.pageNum-1}"/> </c:url> <a href="${url}">上一页</a> <c:forEach begin="1" end="${pageInfo.pages}" var="i"> <c:url value="/user/list" var="url"> <c:param name="pageNum" value="${i}"/> </c:url> <c:if test="${pageInfo.pageNum == i}"> <strong>${i}</strong> </c:if> <c:if test="${pageInfo.pageNum != i}"> <a href="${url}">${i}</a> </c:if> </c:forEach> <c:url value="/user/list" var="url"> <c:param name="pageNum" value="${pageInfo.pageNum+1}"/> </c:url> <a href="${url}">下一页</a> </c:if> </div> ``` 在这个JSP页面中,我们使用c:forEach标签遍历查询结果,使用pageInfo对象显示分页信息,使用c:url标签生成分页链接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值