Mybatis 分页

目录

[一、Mybatis Plus 分页](#一、Mybatis Plus 分页)

[1. 配置](#1. 配置)

(1)依赖

(2)创建MybatisPlusConfig配置类,配置分页插件

[2. 纯代码分页查询](#2. 纯代码分页查询)

[(1) 执行查询(这里调用的是IService接口的page方法,也可以使用BaseMapper接口的selectPage方法)](#(1) 执行查询(这里调用的是IService接口的page方法,也可以使用BaseMapper接口的selectPage方法))

[(2) 返回结果](#(2) 返回结果)

[3. 自定义sql分页](#3. 自定义sql分页)

(1)mapper接口

(2)自定义SQL

(3)代码

(4)返回结果

(5)不分页查询

二、PageHelper分页

1.配置

(1)依赖

[(2) 配置文件](#(2) 配置文件)

2.自定义SQL分页

(1)mapper接口

(2)自定义SQL

(3)代码

(4)返回结果

(5)不分页查询


一、Mybatis Plus 分页

1. 配置
(1)依赖
XML 复制代码
        <!-- mybatis-plus 依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3.4</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>
(2)创建MybatisPlusConfig配置类,配置分页插件
java 复制代码
package com.example.pagetest.conf;

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配置类
 */
@Configuration
public class MyBatisPlusConfig {

    /**
     * MybatisPlus拦截器添加分页插件
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}
2. 纯代码分页查询
(1) 执行查询(这里调用的是IService接口的page方法,也可以使用BaseMapper接口的selectPage方法)
java 复制代码
    @GetMapping("/list/page")
    public Page listPage(Integer sex, Long pageCurrent, Long pageSize) {
        log.info("current: {}, pageSize: {}", pageCurrent, pageSize);
        // 构造查询条件
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("sex", sex);
        // 创建分页对象
        Page<User> page = new Page<>(pageCurrent, pageSize);
        // 调用IService接口的page方法,执行分页查询
        Page<User> userPage = userService.page(page, queryWrapper);
        return userPage;
    }
(2) 返回结果

{

"records": [

{

"id": 1,

"name": "张三",

"age": 18,

"sex": 0,

"createTime": null,

"createBy": null

},

{

"id": 2,

"name": "李四",

"age": 19,

"sex": 0,

"createTime": null,

"createBy": null

}

],

"total": 4,

"size": 2,

"current": 1,

"orders": [],

"optimizeCountSql": true,

"searchCount": true,

"countId": null,

"maxLimit": null,

"pages": 2

}

3. 自定义sql分页
(1)mapper接口
java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    IPage<User> selectListPage(IPage<User> page, @Param("sex") Integer sex);
}
(2)自定义SQL
java 复制代码
    <select id="selectListPage" resultMap="BaseResultMap">
        select
            id, name, age, sex, create_time, create_by
        from user
        where sex = #{sex}
    </select>
(3)代码
java 复制代码
    @Override
    public IPage<User> queryListPageBySQl(Integer sex, Long pageCurrent, Long pageSize) {
        // 创建分页对象
        Page<User> page = new Page<>(pageCurrent, pageSize);
        IPage<User> userPage = userMapper.selectListPage(page, sex);
        return userPage;
    }
(4)返回结果

与之前类似

(5)不分页查询

pageCurrent和pageSize均传入-1即可查询全部结果

二、PageHelper分页

1.配置
(1)依赖

依赖有pagehelper-spring-boot-starterpagehelper两种。pagehelper-spring-boot-starter是使用springboot进行自动装配,pagehelper需要自行在配置文件中配置拦截器插件。

XML 复制代码
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>
(2) 配置文件
XML 复制代码
pagehelper:
  # 指定数据库(可以不配置,插件会自动检测数据库的类型)
  helper-dialect: mysql
  # 分页合理化参数
  reasonable: true
  # 分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页
  support-methods-arguments: true
  # 用于从对象中根据属性名取值(可以配置pageNum,pageSize,count,pageSizeZero,reasonable。不配置映射的用默认值。)
  params: count=countSql

reasonable:当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。默认false,如果pageNum<1或pageNum>pages会返回空数据

support-methods-arguments:分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页

2.自定义SQL分页
(1)mapper接口
java 复制代码
    List<User> selectListPageHelper(Integer sex);
(2)自定义SQL
XML 复制代码
    <select id="selectListPageHelper" resultMap="BaseResultMap">
        select
            id, name, age, sex, create_time, create_by
        from user
        where sex = #{sex}
    </select>
(3)代码
java 复制代码
    @Override
    public  PageInfo<User> queryListByPageHelper(Integer sex, Integer pageCurrent, Integer pageSize){
        // 第 1 个参数为当前页码数,第 2 个参数为每页显示的条数
        PageHelper.startPage(pageCurrent, pageSize);
        List<User> userList = userMapper.selectListPageHelper(sex);
        // 通过 PageInfo 获取分页信息
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        return pageInfo;
    }
(4)返回结果

{

"total": 4,

"list": [

{

"id": 1,

"name": "张三",

"age": 18,

"sex": 0,

"createTime": null,

"createBy": null

},

{

"id": 2,

"name": "李四",

"age": 19,

"sex": 0,

"createTime": null,

"createBy": null

}

],

"pageNum": 1,

"pageSize": 2,

"size": 2,

"startRow": 1,

"endRow": 2,

"pages": 2,

"prePage": 0,

"nextPage": 2,

"isFirstPage": true,

"isLastPage": false,

"hasPreviousPage": false,

"hasNextPage": true,

"navigatePages": 8,

"navigatepageNums": [

1,

2

],

"navigateFirstPage": 1,

"navigateLastPage": 2

}

(5)不分页查询
java 复制代码
PageHelper.startPage(pageCurrent, pageSize, false);

查询所有数据

a. pageSize传入小于等于0的值,pageCurrent不为空。

b. 第三个参数默认为true:只查询所有记录条数,不查询具体数据;若为false:则查询所有数据,而且会导致分页查询时total总记录数永远为-1

相关推荐
仰望星空@脚踏实地2 小时前
Spring Boot Web 服务单元测试设计指南
spring boot·后端·单元测试
一勺菠萝丶3 小时前
Spring Boot + MyBatis/MyBatis Plus:XML中循环处理List参数的终极指南
xml·spring boot·mybatis
RainbowSea5 小时前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
风象南5 小时前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗5 小时前
springboot中使用线程池
java·spring boot·后端
hello早上好6 小时前
JDK 代理原理
java·spring boot·spring
PanZonghui6 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农6 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zyxzyx6666 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
coding and coffee7 小时前
狂神说 - Mybatis 学习笔记 --下
java·后端·mybatis