大致结构如下:

一、定义返回数据结构

创建返回数据结构主要是为了统一方便,和分页查询的关系并不大,也可以忽略这一步。

package boc.ljh.config;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;@ApiModel("返回数据结构")
public class Result<T> {@ApiModelProperty("返回状态")private Integer status;@ApiModelProperty("返回信息")private String message;@ApiModelProperty("返回数据")private T date;public String getMessage() {return message;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}public void setMessage(String message) {this.message = message;}public T getDate() {return date;}public void setDate(T date) {this.date = date;}
}

二、封装分页查询类

package boc.ljh.config;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;import java.util.List;@ApiModel("分页与查询")
public class PaginationHelper<T,O> {@ApiModelProperty("开始记录索引")private int start;@ApiModelProperty("当前页码")private int pageNum;@ApiModelProperty("每页条数")private int pageSize;@ApiModelProperty("数据总条数")private int totalSize;@ApiModelProperty("总页数")private int totalPages;@ApiModelProperty("查询参数")private O options;@ApiModelProperty("返回的数据")private List<T> data;public int getStart() {if(pageNum==0){pageNum=1;}start = this.getPageSize() * (pageNum-1);return start;}public void setStart(Integer start) {this.start = start;}public void setStart(int start) {this.start = start;}public int getPageNum() {return pageNum;}public void setPageNum(int pageNum) {this.pageNum = pageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalSize() {return totalSize;}public void setTotalSize(int totalSize) {this.totalSize = totalSize;}public int getTotalPages() {return totalPages;}public void setTotalPages(int totalPages) {this.totalPages = totalPages;}public O getOptions() {return options;}public void setOptions(O options) {this.options = options;}public List<T> getData() {return data;}public void setData(List<T> data) {this.data = data;}
}

三、dao、service、controller层

dao:
package boc.ljh.dao;import boc.ljh.config.PaginationHelper;
import boc.ljh.pojo.User;import javax.jws.soap.SOAPBinding;
import java.util.List;public interface UserDao {//获取用户列表List<User> loadAllUserInfo(PaginationHelper paginationHelper);//获取数据条数Integer loadAllUserCount();
}
service:
package boc.ljh.service;import boc.ljh.config.PaginationHelper;
import boc.ljh.pojo.User;
import org.apache.ibatis.annotations.Select;
import org.omg.CORBA.INTERNAL;
import org.springframework.stereotype.Service;import java.util.List;@Service
public interface UserService {//获取用户列表List<User> loadAllUserInfo(PaginationHelper paginationHelper);//获取数据条数Integer loadAllUserCount();
}
serviceImpl:
package boc.ljh.service;import boc.ljh.config.PaginationHelper;
import boc.ljh.dao.UserDao;
import boc.ljh.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;@Service
public class UserServiceImpl implements UserService {@Resourceprivate UserDao userDao;@Overridepublic List<User> loadAllUserInfo(PaginationHelper paginationHelper) {return userDao.loadAllUserInfo(paginationHelper);}@Overridepublic Integer loadAllUserCount() {return userDao.loadAllUserCount();}
}
xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="boc.ljh.dao.UserDao"><resultMap id="BaseResultMap" type="boc.ljh.pojo.User"><id column="user_id" jdbcType="INTEGER" property="userId"/><result column="user_name" jdbcType="VARCHAR" property="userName"/><result column="user_age" jdbcType="INTEGER" property="userAge"/></resultMap><select id="loadAllUserInfo" parameterType="boc.ljh.config.PaginationHelper" resultMap="BaseResultMap">select * from user order by user_id ASC limit #{start},#{pageSize}</select><select id="loadAllUserCount" resultType="java.lang.Integer">select count(*) from user</select></mapper>
controller:
package boc.ljh.controller;import boc.ljh.config.AppCode;
import boc.ljh.config.PaginationHelper;
import boc.ljh.config.Result;
import boc.ljh.pojo.User;
import boc.ljh.service.UserService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.jws.soap.SOAPBinding;@Api(tags = "用户管理")
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;@ApiOperation("获取用户列表")@PostMapping("loadAllUserList")@ApiOperationSupport(ignoreParameters = {"data","options","totalSize","totalPages","start"})public Result<PaginationHelper> loadAllUserInfo(@RequestBody PaginationHelper paginationHelper){Result<PaginationHelper> result = new Result();if(paginationHelper == null){paginationHelper = new PaginationHelper<>();}if(paginationHelper.getOptions() == null){paginationHelper.setOptions(new User());}paginationHelper.setData(userService.loadAllUserInfo(paginationHelper));paginationHelper.setTotalSize(userService.loadAllUserCount());result.setDate(paginationHelper);result.setStatus(200);result.setMessage("查询成功");return result;}}

四、测试

重点

首先要知道sql中的limit不是直接分页查询的。比如limit 1,3,。并不是查询第一页每页三条数据的意思,而从第二条数据起查询三条数据,查询的是表中的2-5之间的数据。

select * from user limit 0,5。查询第0-5条之间的数据
select * from user limit 1,5。查询第1-6条之间的数据
select * from user limit 5,5。查询第6-11条之间的数据

可以看封装的分页查询类中有start(开始记录索引)、pageNum(当前页码)、pageSize(每页条数)这个三个参数。
sql需要写成下面这种形式传start(开始记录索引)、pageNum(当前页码)。而不是pageNum(当前页码)、pageSize(每页条数)。

select * from user limit #{start},#{pageSize}

sql不能改变就需要改变其他东西实现页面输入pageNum和pageSize参数实现分页查询功能。

改变封装的分页查询类中start参数的get方法,如下所示:

当页面输入pageNum=1,pageSize=10时,通过下面的改动,上面的sql就会变成
select * from user limit 0,10
当页面输入pageNum=2,pageSize=10时,通过下面的改动,上面的sql就会变成
select * from user limit 10,10
当页面输入pageNum=3,pageSize=10时,通过下面的改动,上面的sql就会变成
select * from user limit 20,10
这样就可以实现分页查询。

 public int getStart() {if(pageNum==0){pageNum=1;}start = this.getPageSize() * (pageNum-1);return start;}

mybatis实现分页查询-自己封装分页方法相关推荐

  1. mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper

    MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...

  2. java分页查询参数封装

    分页查询参数封装的父类,可以根据需要添加字段: import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiMod ...

  3. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

  4. java mybatis分页查询语句_mybatis分页查询的实现(一)

    一.总结了mybatis中五种不同实现分页查询的方法 UserMapper.java接口文件 public interface UserMapper { //分页查询 public List sele ...

  5. 分页条件查询_mongodb多条件分页查询的三种方法

    自我推荐 一.使用limit和skip进行分页查询 public List<User> pageList(int pageNum ,int pageSize){List<User&g ...

  6. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  7. Oracle中进行分页查询的三种方法

    前言: 在mysql数据库中,可以很简单的使用limit实现分页查询,不过limit不能在Oracle中使用,不过Oracle中有替代品rownum,接下来使用rownum去实现表emp(Oracle ...

  8. java分页查询_java实现分页查询

    1.基本思路 我现阶段的分页查询的实现是基于sql语句的. select * from user where id limit a, b 构造出相应的a和b就可以查询出想要的数据,在显示在页面上.重点 ...

  9. mysql分片库分页查询_mysql数据库分页查询优化

    当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量 1.   直接用limit start, count分页语句, 也是我程序中用的方法: ...

最新文章

  1. 冒泡排序java代码_看动画学算法之:排序冒泡排序
  2. leetcode算法题--大礼包
  3. UNIX再学习 -- 错误和警告
  4. cordova报错:ANDROID_SDK_ROOT=undefined (recommended setting)
  5. ssl1335-最佳派对【二分图,最大匹配,图论】
  6. 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统
  7. 线性代数【14】线性变换 linear transformation
  8. Mac Homebrew命令报错/usr/local/Homebrew/Library/Homebrew/version.rb:368:in `initialize’
  9. 前端性能优化学习(慕课网)笔记
  10. HTML5中video和audio所支持的格式
  11. 主动事务处理器编写BFM
  12. 一般熟练盲打需要多久_如何学会盲打, 大概需要多长时间?
  13. jmeter获取上一个接口的返回值作为下一个接口的传入参数
  14. caffe中各种loss函数
  15. Booth(布斯)算法——补码乘法运算过程
  16. 隆重推荐:大漠苍狼2-绝密飞行
  17. 【计算机网络】冗余码计算
  18. windows文件服务器双机热备_分享MSCS windows 群集配置过程
  19. 网络-邮件协议STMP、POP3详解与实战(Python发送邮件)
  20. 如何在调色环节保障网剧制作的创意、效率和品质(案例解析)

热门文章

  1. 疫后“反弹式”增长,AI营销或为广告业打开一扇新窗
  2. 印度市场,圆不了二线国产手机的美梦
  3. android o 小米note 3,小米 Note 3 MIUI 10 安卓 8.0 内测开启
  4. Python基础教程:条件语句的七种写法
  5. python max和min函数的高级用法
  6. Python-jsonpath使用和json转换
  7. 四种高性能数据类型,Python collections助你优化代码、简洁任务
  8. 学python必须知道的30个技巧
  9. 排序算法的python实现
  10. 5 加盐_小葱拌豆腐的5种做法,收藏起来慢慢学!