MybatisPlus的分页插件简单使用

MyBatis-Plus 提供了强大的分页插件,可以方便地实现数据库查询结果的分页。

以下是关于 MyBatis-Plus 分页插件的详细介绍,包括如何配置和使用。

1. 添加依赖

首先,需要在项目中添加 MyBatis-Plus 和分页插件的相关依赖。使用 Maven,在 pom.xml 文件中添加:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
</dependency>

2. 配置分页插件

官方文档说明 https://baomidou.com/plugins/pagination/
在 Spring Boot 项目中,通常需要在配置类中添加分页插件配置。创建一个配置类来配置 MyBatis-Plus 分页插件。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));
        return interceptor;
    }
}

3. 使用分页插件

MyBatis-Plus 分页插件提供了 Page 类用于分页查询。可以在 Mapper 接口中使用分页查询方法,或者在 Service 层中进行调用。

示例:使用分页插件进行查询

假设有一个 User 实体类和对应的 Mapper 接口:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 自定义分页查询方法
    IPage<User> selectUserPage(IPage<User> page);
}

在 Service 层中使用分页查询:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public IPage<User> getUserPage(int pageNum, int pageSize) {
        IPage<User> page = new Page<>(pageNum, pageSize);
        return userMapper.selectPage(page, null);
    }
}

在 Controller 层中调用 Service 层方法进行分页查询:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public IPage<User> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
        return userService.getUserPage(pageNum, pageSize);
    }
}

4. 配置分页插件属性

分页插件的一些常见配置项可以在 application.propertiesapplication.yml 中进行设置。

# application.properties
mybatis-plus.configuration.log-impl=STDOUT_LOGGING
mybatis-plus.global-config.db-config.id-type=auto

5. 处理分页查询参数

在分页查询中,可以通过 Page 类传递分页参数,如当前页码和每页记录数。分页插件会自动处理 SQL 查询,生成分页所需的 LIMITOFFSET

IPage<User> page = new Page<>(1, 10); // 第1页,每页10条记录
IPage<User> userPage = userMapper.selectPage(page, null);

配置分页插件返回统一结果集示例
package com.echo.common.result;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

/**
 * 全局统一返回结果类
 */
@Data
public class Result<T> {

    //返回码
    private Integer code;

    //返回消息
    private String message;

    //返回数据
    private T data;

    //返回总数
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private Long total;

    public Result() {
    }

    private static <T> Result<T> build(T data) {
        Result<T> result = new Result<>();
        // 配置分页插件返回统一结果集
        if (data instanceof IPage<?> page) {
            result.setTotal(page.getTotal());
            result.setData((T) page.getRecords());
        } else {
            result.setData(data);
        }
        return result;
    }

    public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
        Result<T> result = build(body);
        result.setCode(resultCodeEnum.getCode());
        result.setMessage(resultCodeEnum.getMessage());
        return result;
    }


    public static <T> Result<T> ok(T data) {
        return build(data, ResultCodeEnum.SUCCESS);
    }

    public static <T> Result<T> ok() {
        return Result.ok(null);
    }

    public static <T> Result<T> fail() {
        return build(null, ResultCodeEnum.FAIL);
    }

    public static <T> Result<T> fail(Integer code, String message) {
        Result<T> result = build(null);
        result.setCode(code);
        result.setMessage(message);
        return result;
    }
}

总结

  1. 添加依赖:在项目中添加 MyBatis-Plus 和分页插件的依赖。
  2. 配置插件:在配置类中配置 MyBatis-Plus 分页插件。
  3. 使用分页:在 Mapper 和 Service 层使用 Page 类进行分页查询。
  4. 分页查询参数:通过 Page 类传递分页参数,插件会自动处理分页 SQL。

这样配置和使用 MyBatis-Plus 的分页插件可以方便地进行分页查询,并简化了分页处理的复杂性。

Mybatis-plus配置分页插件返回统一结果集

posted @   槑孒  阅读(746)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2022-08-08 Linux之centos配置yum阿里源
2022-08-08 Linux uname 命令
2022-08-08 Linux文件压缩及解压常用命令
2022-08-08 Linux安装geoserver
2022-08-08 Linux 安装Mysql 详细教程
2022-08-08 Linux 链接概念之硬链接与符号链接
2022-08-08 Linux 文件与目录管理
点击右上角即可分享
微信分享提示