文章目录

  • 一、后台分页配置
    • 1. 配置分页插件
    • 2. 编写分页代码
    • 3. 测试
  • 二、自定义查询
    • 2.1. 自定义接口
    • 2.2. 自定义查询
    • 2.3. 测试自定义分页
一、后台分页配置

MyBatis Plus自带分页插件(即BaseMapper接口中的selectPage()方法),只要简单的配置即可实现分页功能,具体步骤如下:

1. 配置分页插件

新创一个配置类,在配置类里面配置分页插件

package com.gblfy.flowable.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** MyBatisPlus 分页插件配置** @Author gblfy* @Date 2022-05-04 14:41**/
@Configuration
public class MyBatisPlusPaginationInnerConfig {/*** 分页插件(官网最新)*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}
2. 编写分页代码

分页的所有数据都在userPage对象中封装着,所以可以调用userPage对象的一系列方法对分页数据进行操作。

  package com.gblfy.flowable.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gblfy.flowable.entity.SysUser;
import com.gblfy.flowable.mapper.SysUserMapper;
import com.gblfy.flowable.service.SysUserService;
import com.gblfy.flowable.tools.pager.PagerModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** <p>* 用户信息表 服务实现类* </p>** @author gblfy* @since 2022-05-04*/
@Slf4j
@Service
public class SysUserServiceImpl implements SysUserService {@Autowiredprivate SysUserMapper userMapper;@Overridepublic PagerModel<SysUser> list(Page<SysUser> page, QueryWrapper<SysUser> queryWrapper) {Page<SysUser> userIPage = userMapper.selectPage(page, queryWrapper);// 分页的所有数据都在userPage对象中封装着// 获取总页数long pages = userIPage.getPages();//一页显示几条数据long size = userIPage.getSize();// 获取当前页long current = userIPage.getCurrent();// 获取当前页数据集合List<SysUser> records = userIPage.getRecords();// 获取总记录数long total = userIPage.getTotal();// 当前页是否有下一页boolean hasNext = userIPage.hasNext();// 当前页是否有上一页boolean hasPrevious = userIPage.hasPrevious();System.out.println("总页数pages=" + pages);System.out.println("当前页current=" + current);System.out.println("当前页显示几条数据size=" + size);System.out.println("当前页数据集合records=" + records);System.out.println("总记录数total=" + total);System.out.println("是否有下一页hasNext=" + hasNext);System.out.println("是否有上一页hasPrevious=" + hasPrevious);return new PagerModel<>(userIPage.getTotal(), records);}@Overridepublic Page<SysUser> listPage(Page<SysUser> page, QueryWrapper<SysUser> queryWrapper) {return userMapper.selectPage(page, queryWrapper);}
}
3. 测试

当前数据库的user表中有14条记录,设置当前页数为1,每页记录数为10。
如图:

controller

package com.gblfy.flowable.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gblfy.flowable.entity.SysUser;
import com.gblfy.flowable.service.SysUserService;
import com.gblfy.flowable.tools.pager.PagerModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** MyBatisPlus 分页测试** @Author gblfy* @Date 2022-05-04 15:32**/
@RestController
@RequestMapping("/page")
public class MyBatisPlusPaginateController {@Autowiredprivate SysUserService userService;@GetMapping("/list")public PagerModel<SysUser> list(@RequestParam(value = "keyword", defaultValue = "") String keyword,@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();//条件构造器queryWrapper.like("user_name", keyword);//模糊查询LikePage<SysUser> page = new Page(pageNum, pageSize);//分页插件return userService.list(page, queryWrapper);//查询数据}@GetMapping("/listPage")public Page<SysUser> listPage(@RequestParam(value = "keyword", defaultValue = "") String keyword,@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();//条件构造器queryWrapper.like("user_name", keyword);//模糊查询LikePage<SysUser> page = new Page(pageNum, pageSize);//分页插件return userService.listPage(page, queryWrapper);//查询数据}
}

默认返回Page基本可以满足,如果自定义返回封装,参考以下案例即可

package com.gblfy.flowable.tools.pager;import lombok.Builder;
import lombok.Data;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;/*** 分页** @author gblfy* @date 2022-05-03**/
@Data
@Builder(toBuilder = true)
public class PagerModel<T> implements Serializable {private static final long serialVersionUID = 4804053559968742915L;/*** 总记录数*/private long total;/*** 每页的查询结果集*/private List<T> rows = new ArrayList();/*** 获取总页数*/private long pages;/*** 获取当前页*/private long current;/*** 当前页显示几条数据*/private long size;/*** 当前页是否有下一页*/private boolean hasNext;/*** 当前页是否有上一页*/private boolean hasPrevious;public PagerModel() {}public PagerModel(long total, List<T> rows) {this.total = total;this.rows = rows;}public PagerModel(long total, List<T> rows, long pages, long current) {this.total = total;this.rows = rows;this.pages = pages;this.current = current;}public PagerModel(long total, List<T> rows, long pages, long current, long size) {this.total = total;this.rows = rows;this.pages = pages;this.current = current;this.size = size;}public PagerModel(long total, List<T> rows, long pages, long current, boolean hasNext, boolean hasPrevious) {this.total = total;this.rows = rows;this.pages = pages;this.current = current;this.hasNext = hasNext;this.hasPrevious = hasPrevious;}public PagerModel(long total, List<T> rows, long pages, long current, long size, boolean hasNext, boolean hasPrevious) {this.total = total;this.rows = rows;this.pages = pages;this.current = current;this.size = size;this.hasNext = hasNext;this.hasPrevious = hasPrevious;}
}
二、自定义查询
2.1. 自定义接口

如果想自定义查询那么在UserMapper.java里面写个方法

 Page<User> selectPageVo(@Param("page") Page<User> page,@Param("age") Integer age);
2.2. 自定义查询

UserMapper.xml文件的查询语句

<select id="selectPageVo" resultType="com.mybatis_plus.bean.User">SELECT id,name,age,email FROM user WHERE age>#{age}
</select>
2.3. 测试自定义分页
@Testvoid test02(){//测试自定义分页Page<User> page=new Page<>(1,3);userMapper.selectPageVo(page,20);//调用自定义的查询System.out.println(page.getRecords());//获取当前页数据 3条记录System.out.println(page.getSize());//获取每页的条数 3System.out.println(page.getCurrent()); //获取当前页码 1System.out.println(page.getPages());//获取总页数 2System.out.println(page.getTotal());//获取总记录数 4System.out.println(page.hasNext());//获取有没有下一页 trueSystem.out.println(page.hasPrevious());//获取是否有上一页 false}

MyBatisplus分页插件相关推荐

  1. SpringBoot集成MyBatis-Plus分页插件

    1.说明 MyBatis使用分页查询功能, 需要配置分页插件, 如果没有配置, 则分页功能不生效. 2.分页查询API 下面列举了两个内置的分页查询API, 使用这些API时需要配置分页插件, 当然也 ...

  2. MyBatis-Plus分页插件使用避坑:cannot be cast to com.baomidou.mybatisplus.core.metadata.IPage

    1.bug背景 1.1.Spring配置文件 <!--配置数据源--><bean id="dataSource" class="com.alibaba. ...

  3. mybatis-plus分页插件配置与使用(springboot)

    mybatis-plus分页插件配置 package com.itxl.zhxy.utils;import com.baomidou.mybatisplus.annotation.DbType; im ...

  4. MyBatis-Plus分页插件的使用

    从MyBatis-Plus 3.4.0开始,不再使用旧版本的PaginationInterceptor ,而是使用MybatisPlusInterceptor. 下面是MyBatis-Plus 3.4 ...

  5. SpringBoot+Vue从零开始做网站8-全局异常处理和使用mybatis-plus分页插件

    全局异常处理用于前端统一错误显示,还有就是后端分页插件,使用的mybatis-plus. SpringBoot的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我们需要对这些 ...

  6. MyBatis-Plus分页插件IPage的使用展示------分页查询

    使用了Mybatis-plus的分页插件----IPage: IPage 需要在dao层传入IPage的实现类Page对象,该对象实现了IPage IPage内部原理是基于拦截器,拦截的是方法以及方法 ...

  7. mybatis-plus分页插件(PaginationInnerInterceptor)报错的问题

    问题 mybatis-plus使用 PaginationInnerInterceptor 分页插件,在调用分页查询方法时(****Service.page(new Page(param.getPage ...

  8. element ui +mybatisPlus分页插件实现分页功能

    elementui pagination插件 当然这里的依赖部分就需要去创库ctrl+v了 <!--分页部分 pagination插件 @current-change="handlep ...

  9. 若依框架以及Mybatis-plus分页插件失效,数据库有多条却只查前十条

    最近在若依的基础上开发,因为若依自带分页所以一直就没考虑数据分页,最近发现数据库明明有数据,却只能查出前10条. 首先分析原因,我是在原来代码的基础上,重新封装了vo类返回给前端,导致的分页失效,首先 ...

最新文章

  1. Druid数据库连接池超时问题com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10
  2. 迁移 Express 到函数计算
  3. 【ARM】一步一步移植Linux Kernel 2.6.13到板子
  4. Hadoop入门(十八)Mapreduce的倒排索引程序
  5. python cmath模块_cmath模块-PYTHON
  6. access vba 用recordset读取表中数据的简单方法
  7. 计算机专业综合改革举措,计算机专业教学改革
  8. 战胜棋王后,人工智能是否可以颠覆安全?
  9. call_user_func_array函数详解
  10. 阿里云mysql导出表_mysql导出数据库表
  11. 假装内卷,才是互联网人的骚操作
  12. 如何在笔试的时候绕开切屏提示
  13. 论文阅读_广义加性模型_GAMs
  14. 【转】初识caffe2
  15. java模板velocity,java模板引擎:velocity
  16. python编程基础-task4-FOR、IF以及while
  17. mysql跨服务器触发器
  18. c++ 读取csv文件格式点云
  19. 网课作业禁止粘贴?禁用JavaScript了解一下!
  20. C++实验五 运算符重载

热门文章

  1. 【Mixup】《Mixup:Beyond Empirical Risk Minimization》
  2. 华为测试c语言面试题,硬件测试笔试题
  3. 小屏幕Android机,Palm:3.3英寸小屏安卓机来了
  4. python实现淘宝秒杀_python实现简单淘宝秒杀功能
  5. SteamVR使用注意
  6. 关于“wining attitude”
  7. stm32f103c8t6与stm32f103zet6 基于SX1276串口通信-----发送端(二)
  8. 计算机主机报警是什么原因,电脑主机一直滴滴响开不了机 解决电脑主机一直滴滴响开不了机的方法...
  9. 经济型EtherCAT运动控制器(八):轴参数与运动指令
  10. Revit2016 笔记05