spring boot 实现数据库分页操作

一:依赖引入

需要的依赖参考spring boot使用MyBatis-Plus依赖实现操作数据库-CSDN博客

如果你使用的是spring boot4的话需要额外增加一个依赖

复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-jsqlparser</artifactId>
    <version>3.5.17</version>
</dependency>

二:配置分页拦截器

复制代码
package com.example.demo.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;

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

三:分页实现流程

1. 创建分页对象

复制代码
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

// 分页对象 pageNum页码,pageSize每页条数
Page<User> page = new Page<>(1, 10);

2. 增加条件构造器(可选)

复制代码
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

//条件构造器
QueryWrapper<User> wrapper = new QueryWrapper<>();

//查询条件
wrapper.eq("name", "张三");         // name = '张三'
wrapper.like("phone", "138");       // phone like '%138%'
wrapper.ge("age", 18);              // age >= 18
wrapper.le("age", 60);              // age <= 60
wrapper.eq("status", 1);            // status=1

如果想要使用实体属性代替筛选条件,可以使用LambdaQueryWrapper来实现

复制代码
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;


//条件构造器
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();

wrapper.eq(User::getName, "张三")
       .like(User::getPhone,"138")
       .ge(User::getAge,18);

3. 执行分页查询

复制代码
import com.baomidou.mybatisplus.core.metadata.IPage;


//执行分页查询
IPage<User> result = userMapper.selectPage(page, null);

//带条件的分页查询
IPage<User> result = userMapper.selectPage(page, wrapper);

4. 获取数据

复制代码
//获取数据列表
List<User> list = result.getRecords();

//获取总条数
Long total = result.getTotal();

四:分页实现示例

复制代码
package com.example.demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.*;

@RestController
@RequestMapping("/user")
public class UserController {

    //注入mapper
    @Resource
    private UserMapper userMapper;


    @PostMapping("/page")
    public Map<String, Object> page(
            @RequestParam(required = false, defaultValue = "1") long pageNum,
            @RequestParam(required = false, defaultValue = "10") long pageSize,
            @RequestParam(required = false) String username
    ) {
        // 分页对象
        Page<User> page = new Page<>(pageNum, pageSize);

        //条件构造器
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();

        if (username != null) {
            queryWrapper.like(User::getUsername, username);
        }

        queryWrapper.orderByAsc(User::getId);

        //执行分页查询
        IPage<User> result = userMapper.selectPage(page, queryWrapper);

        //获取数据列表
        List<User> list = result.getRecords();

        //获取总条数
        Long total = result.getTotal();

        Map<String, Object> data = new HashMap<>();
        data.put("list", list);
        data.put("total", total);
        return data;
    }
}

效果如下

相关推荐
这个DBA有点耶2 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
DBA_G2 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备2 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远2 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19912 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安2 天前
MySQL-触发器
数据库·mysql
白远山2 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析