在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

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

为林州等地区用户提供了全套网页设计制作服务,及林州网站建设行业解决方案。主营业务为做网站、成都网站设计、林州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

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

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

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

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

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

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



 
   
   
   
   
  
 
 
 
   
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 = $("
").appendTo(this.$parent); 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 = $("
").appendTo(this.$div); 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(curPagethis.spaceStep && icurEnd && ithis.spaceStep) || (i==curEnd && i

下面是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 $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(); }

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

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

第三步:后台的处理

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

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

一共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"?>


  
    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},
    
    
  
  

最后我们看下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 < 1 ? 1 : 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方法没,这个方法就是判断当前执行到第几页,从哪个数字开始,到那个数字结束,是分页查询里面一个很关键的方法。

第四步:通过前后端的配合,看下实现后效果:

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

看完上述内容,你们掌握在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


本文名称:在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询
文章地址:http://pwwzsj.com/article/jisshh.html