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;
    }
}

效果如下

相关推荐
w-w0w-w9 小时前
SQL注入
网络·数据库·sql
tianyuanwo9 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼9 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
IvorySQL10 小时前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
幽灵诶11 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河11 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
宇宙无敌暴龙战士66612 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊12 小时前
MySQL 的四种隔离级别
java·数据库·mysql
say_fall12 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
云创智城-yuncitys13 小时前
YunParking 4.0:JDK 17 与 Spring Boot 3.2 的停车云升级
java·开发语言·spring boot