当前位置: 首页 > ops >正文

mybatisplus的分页查询插件

正常我们想实现分页查询的话,可能会采用大概以下的方式:

Controller:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;@RestController
public class UserController {private final UserService userService;public UserController(UserService userService) {this.userService = userService;}@GetMapping("/users")public Page<User> getUsers(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "10") int pageSize,@RequestParam(required = false) String name) {return userService.getUsersByPage(pageNum, pageSize, name);}
}Mapper:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface IUserMapper extends BaseMapper<User> {// 这里可以直接继承 BaseMapper,MyBatis-Plus 会自动提供分页方法
}Service:
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;public class UserService {private final IUserMapper userMapper; // 假设这里是注入的 UserMapperpublic UserService(IUserMapper userMapper) {this.userMapper = userMapper;}public Page<User> getUsersByPage(int pageNum, int pageSize, String name) {// 创建分页对象Page<User> page = new Page<>(pageNum, pageSize);// 使用 LambdaQueryWrapper 来构造查询条件LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();if (name != null && !name.isEmpty()) {queryWrapper.like(User::getName, name); // 模糊查询姓名}// 执行分页查询Page<User> result = userMapper.selectPage(page, queryWrapper);return result; // 返回分页数据}
}

这种手工的方式确实可以,但完美其实有更好的选择,因为mybatisplus给我们提供了一个分页查询的插件,可以在config目录下配置:

@Configuration
@MapperScan("scan.your.mapper.package") // 把你Mapper的目录写在这,让它能够扫描到
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn interceptor;}
}

然后假设UserService就可以写成下面的方式来调用分页查询了

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.metadata.IPage;@Service
public class UserService extends ServiceImpl<UserMapper, User> implements UserService {public Page<User> getUsersByPage(int pageNum, int pageSize, String name) {// 创建分页对象Page<User> page = new Page<>(pageNum, pageSize);// 使用 QueryWrapper 或 LambdaQueryWrapper 来构造查询条件LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();if (name != null && !name.isEmpty()) {queryWrapper.like(User::name, name); // 根据名称模糊查询}// 使用 this.page 调用分页查询return this.page(page, queryWrapper);  // 分页查询}
}
http://www.xdnf.cn/news/7930.html

相关文章:

  • 差分探头在DCDC变换器波形测试中的应用
  • 【vue-text-highlight】在vue2的使用教程
  • Java操作数据库,JDBC
  • 白光干涉仪AM系列:量化管控纳米级粗糙度,位移传感器关键零件寿命提升50%
  • Redis的批量查询--录入操作
  • 平衡二叉树的判定:回溯法的深度解析与迭代法拓展
  • PCIe EP控制器(TLP发送仲裁)
  • Qwen 3技术报告详细解读
  • linux中cpu内存浮动占用,C++文件占用cpu内存、定时任务不运行报错(root) PAM ERROR (Permission denied)
  • 【时时三省】(C语言基础)调用函数
  • clock的时钟频率check代码
  • vue之混入mixin
  • 禾纳EAT3152AP MOS电源芯片PIN TO PIN替代泰德TDM3307/2307方案
  • DDoS防护实战——从基础配置到高防IP部署
  • 86.评论日记
  • 二进制编码、定点数与浮点数
  • 【版本控制】Perforce P4服务器安全配置指南(附常见漏洞、详细配置参数)
  • IEEE Transactions on Wireless Communications 2025年1月-5月论文速览
  • 深入理解 Python 的with语法:资源管理的优雅解决方案
  • C++:array容器
  • Linux 内核探秘:从零构建 GPIO 设备驱动程序实战指南
  • MySQL主键与外键详解:数据关系的基石与守护者
  • 助力 FPGA 国产化,ALINX 携多款方案亮相深圳、广州“紫光同创 FPGA 技术研讨会”
  • 【时时三省】Python 语言----文件
  • java 通过IO控制台输入内容写入到文本当中
  • SQL窗口函数破解:如何优雅获取各分组极值
  • docker中部署Universal Media Server (UMS)
  • Go语言打造:超高性能分布式唯一ID生成工具
  • 关于FPGA 和 ASIC设计选择方向的讨论
  • VoiceFixer语音修复介绍与使用