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

效果如下

相关推荐
小白羊丨1 小时前
异步任务创建接口如何幂等?
android·数据库
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 13 章 整合 MyBatis MyBatis 概述 阅读笔记 37
spring boot·笔记·mybatis
倔强的石头1061 小时前
连接数失控排查:从数据库会话、应用线程池到连接池泄漏
数据库·oracle
vipxieliang1 小时前
订单数据验证:从购物车到支付的完整验证链路
java·spring boot
恒拓高科WorkPlus2 小时前
企业如何搭建安全内部通讯平台|企业内部通讯平台怎么选才更安全?
jvm·数据库·安全
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 13 章 整合 MyBatis 整合 MyBatis 阅读笔记 38
spring boot·笔记·mybatis
学长毕业设计2 小时前
基于SpringBoot的校园二手物品交易系统(源码+文档+讲解视频)
java·spring boot·后端
夜雪一千2 小时前
MySQL如何限制账号权限,最小权限原则实践
数据库·mysql
2601_962056232 小时前
EasyMarkets:“网络安全需求持续升温”
数据库·人工智能