SpringBoot+MyBatis-Plus实现分页功能

 更新时间:2024年01月02日 09:18:26   作者:hoypte  
在SpringBoot项目中,结合MyBatis-Plus(简称MP)可以非常方便地实现分页功能,MP为开发者提供了分页插件PaginationInterceptor,只需简单配置即可使用,本文给大家介绍了SpringBoot+MyBatis-Plus实现分页功能,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下

前言

在SpringBoot项目中,结合MyBatis-Plus(简称MP)可以非常方便地实现分页功能。MP为开发者提供了分页插件PaginationInterceptor,只需简单配置即可使用。

一、配置分页插件

首先,在SpringBoot的配置类中(通常是带有@Configuration注解的类)配置PaginationInterceptor。

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.H2)); // 根据你的数据库类型选择相应的DbType
        return interceptor;
    }
}

注意:在新版本的MyBatis-Plus中,分页插件的配置方式有所变化,不再使用PaginationInterceptor,而是使用MybatisPlusInterceptor结合PaginationInnerInterceptor。请根据你的MP版本选择合适的配置方式。

二、编写Mapper接口

接下来,在Mapper接口中定义分页查询的方法。不需要在Mapper的XML文件中编写SQL语句来实现分页,因为分页插件会自动对SQL进行分页处理。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Select;
import your.package.name.EntityClass; 

public interface YourMapper extends BaseMapper<EntityClass> {
    // 使用MP提供的分页功能,不需要编写具体的分页SQL
    IPage<EntityClass> selectPageList(Page<EntityClass> page, QueryWrapper<EntityClass> queryWrapper);
}

实际上,如果你的EntityClass正确继承了MP的BaseModel(在新版本中通常不需要继承),并且你的Mapper继承了BaseMapper,你甚至不需要在Mapper接口中定义上述的selectPageList方法,因为BaseMapper已经提供了分页查询的方法。

三、在服务层调用分页查询

在服务层,你可以调用Mapper接口中的分页查询方法。首先,你需要创建一个Page对象,并设置当前页码和每页显示的记录数。然后,调用Mapper的方法执行分页查询。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import your.package.name.EntityClass; 
import your.package.name.YourMapper; 

@Service
public class YourService {
    @Autowired
    private YourMapper yourMapper;
    
    public Page<EntityClass> getPageList(int current, int size) {
        // 创建分页对象,current为当前页码,size为每页显示的数量
        Page<EntityClass> page = new Page<>(current, size);
        // 调用Mapper方法进行分页查询,这里假设没有额外的查询条件,如果有可以使用QueryWrapper添加条件
        return yourMapper.selectPage(page, null); // 如果你的Mapper没有定义selectPageList方法,请使用BaseMapper中的selectPage方法代替
    }
}

请注意:如果你的MP版本较新,且你的实体没有继承MP的任何类(这是推荐的做法),你应该直接使用BaseMapper中的selectPage方法。此外,如果你的查询需要额外的条件,可以创建一个QueryWrapper对象来指定这些条件。在上面的示例中,我没有添加任何条件,所以传递了null作为第二个参数。

四、在控制器中调用服务层的分页方法

最后,在控制器中调用服务层的分页方法,并将结果返回给前端。通常,前端会期望得到一个包含当前页码、总页数、每页记录数和数据列表的响应对象。你可以自定义一个响应类来封装这些信息,或者直接使用MP提供的Page对象。这里演示后者。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import your.package.name.EntityClass; 
import your.package.name.YourService; 

@RestController
@RequestMapping("/your-endpoint")
public class YourController {
    @Autowired
    private YourService yourService;
    
    @GetMapping("/page") // 分页查询的API路径,例如/your-endpoint/page?current=1&size=10
    public Page<EntityClass> getPageList(@RequestParam int current, @RequestParam int size) {
        // 调用服务层方法进行分页查询,并返回结果给前端
        return yourService.getPageList(current, size); // 这里的方法名应与服务层一致
    }
}

到此这篇关于SpringBoot+MyBatis-Plus实现分页功能的文章就介绍到这了,更多相关SpringBoot MyBatis-Plus分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis-plus复合主键的使用

    mybatis-plus复合主键的使用

    本文主要介绍了mybatis-plus复合主键的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • spring boot validation参数校验实例分析

    spring boot validation参数校验实例分析

    这篇文章主要介绍了spring boot validation参数校验,结合实例形式分析了spring boot validation进行数据有效性验证的相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 浅析Java线程的中断机制

    浅析Java线程的中断机制

    本篇文章通过代码实例给大家分享了学习Java线程的中断机制的一些心得内容,有兴趣的朋友学习下吧。
    2017-12-12
  • MybatisPlus 主键策略之type=IdType.ASSIGN_ID等详解

    MybatisPlus 主键策略之type=IdType.ASSIGN_ID等详解

    雪花算法(雪花)是微博开源的分布式ID生成算法其核心思想就是:使用一个64位的长型的数字作为全局唯一ID,这篇文章主要介绍了MybatisPlus 主键策略(type=IdType.ASSIGN_ID等详解),需要的朋友可以参考下
    2024-04-04
  • Java如何基于EasyExcel实现导入数据校验并生成错误信息Excel

    Java如何基于EasyExcel实现导入数据校验并生成错误信息Excel

    这篇文章主要介绍了Java如何基于EasyExcel实现导入数据校验并生成错误信息Excel,为了优化项目中的文件导入功能,考虑构建一个基于EasyExcel的通用Excel导入框架,主要解决导入数据的校验问题,避免业务代码中堆积大量校验逻辑,需要的朋友可以参考下
    2024-09-09
  • Java线性表的顺序表示及实现

    Java线性表的顺序表示及实现

    这篇文章主要介绍了Java线性表的顺序表示及实现,顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中
    2022-07-07
  • 详谈Java 异常处理的误区和经验总结(分享)

    详谈Java 异常处理的误区和经验总结(分享)

    下面小编就为大家分享一篇Java 异常处理的误区和经验总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Spring的事件机制知识点详解及实例分析

    Spring的事件机制知识点详解及实例分析

    在本篇内容里小编给大家分享的是一篇关于Spring的事件机制知识点详解及实例分析,有需要的朋友么可以参考下。
    2021-12-12
  • Java中十进制和十六进制的相互转换方法

    Java中十进制和十六进制的相互转换方法

    下面小编就为大家带来一篇Java中十进制和十六进制的相互转换方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java面试题冲刺第十八天--Spring框架3

    Java面试题冲刺第十八天--Spring框架3

    这篇文章主要为大家分享了最有价值的三道关于Spring框架的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论