MyBatis-Plus分页插件的使用

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

下面是MyBatis-Plus 3.4.3.3新版分页的使用方法。

配置

使用分页插件需要配置MybatisPlusInterceptor,将分页拦截器添加进来:

javascript 复制代码
@Configuration
public class MyBatisPlusConfig {

    /**
     * 分页插件配置
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 向MyBatis-Plus的过滤器链中添加分页拦截器,需要设置数据库类型(主要用于分页方言)
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

使用分页功能

和分页功能有关的类是Page类,构造分页参数的方法:

javascript 复制代码
Page<UserEntity> page = new Page<>(1, 1);

第一个参数是页码(从1开始),第二个参数是分页大小。

javascript 复制代码
使用的时候只需要将创建的Page对象作为第一个参数传入即可。

首先,定义接口:

javascript 复制代码
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {

    /**
     * 测试分页插件
     *
     * @param page
     * @return
     */
    Page<UserEntity> testPage(Page<UserEntity> page);
}

然后,编写SQL:

javascript 复制代码
<?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="com.tao.adminserver.mapper.UserMapper">

    <!-- 配置数据库字段和Java类中字段的映射关系 -->
    <resultMap id="baseResultMap" type="com.tao.adminserver.entity.UserEntity">
        <id column="id" property="id" jdbcType="BIGINT" javaType="java.lang.Long"/>
        <result column="name" property="name" jdbcType="VARCHAR" javaType="java.lang.String"/>
        <result column="age" property="age" jdbcType="INTEGER" javaType="java.lang.Integer"/>
        <result column="email" property="email" jdbcType="VARCHAR" javaType="java.lang.String"/>
    </resultMap>


    <!-- 测试分页插件 -->
    <select id="testPage" resultMap="baseResultMap">
        select * from tb_user
    </select>

</mapper>

SQL中不需要用limit来手动分页,分页插件会自己加上的。

最后,来测试一下:

控制台打印的日志:

javascript 复制代码
==>  Preparing: SELECT COUNT(*) FROM tb_user
==> Parameters: 
<==    Columns: COUNT(*)
<==        Row: 3
<==      Total: 1
==>  Preparing: select * from tb_user LIMIT ?
==> Parameters: 2(Long)
<==    Columns: id, name, age, email
<==        Row: 7, Mike, 40, test7@baomidou.com
<==        Row: 8, Tank, 40, test8@baomidou.com
<==      Total: 2

......

==>  Preparing: SELECT COUNT(*) FROM tb_user
==> Parameters: 
<==    Columns: COUNT(*)
<==        Row: 3
<==      Total: 1
==>  Preparing: select * from tb_user LIMIT ?,?
==> Parameters: 2(Long), 2(Long)
<==    Columns: id, name, age, email
<==        Row: 9, Adele, 22, test9@baomidou.com
<==      Total: 1

可以看出,分页之后,首先count计算了总数,然后在查询的时候自动加上了limit语句。

分页结果对象如下:

javascript 复制代码
{
	"current": 1, // 当前是第几页
	"optimizeCountSql": true,
	"orders": [],
	"pages": 2,  // 总共有几页
	"records": [ // 当前页的记录详细信息
		{
			"age": 40,
			"email": "test7@baomidou.com",
			"id": 7,
			"name": "Mike"
		},
		{
			"age": 40,
			"email": "test8@baomidou.com",
			"id": 8,
			"name": "Tank"
		}
	],
	"searchCount": true,
	"size": 2, // 当前页的数据量(分页大小)
	"total": 3 // 数据总量
}
相关推荐
短剑重铸之日8 分钟前
《ShardingSphere解读》16 改写引擎:如何理解装饰器模式下的 SQL 改写实现机制?
java·数据库·后端·sql·shardingsphere·分库分表·装饰器模式
q54314708713 分钟前
VScode 开发 Springboot 程序
java·spring boot·后端
小涛不学习22 分钟前
Java高频面试题(带答案版)
java·开发语言
big_rabbit050222 分钟前
JVM堆内存查看命令
java·linux·算法
学习要积极31 分钟前
Springboot图片验证码-EasyCaptcha
java·spring boot·后端
李少兄41 分钟前
企业资源计划(ERP)系统全景指南
java·前端·数据库·erp
波波七44 分钟前
SSM与Springboot是什么关系? -----区别与联系
java·spring boot·后端
myloveasuka1 小时前
[Java]单列集合
android·java·开发语言
ok_hahaha1 小时前
java从头开始-黑马点评-基础篇
java·开发语言
计算机学姐1 小时前
基于SpringBoot的校园二手书籍交易系统【个性化推荐+数据可视化统计+我买到的+我卖出的】
vue.js·spring boot·后端·mysql·信息可视化·intellij-idea·mybatis