logo

SpringBoot集成MyBatis-Plus:分页、条件查询与SQL日志全攻略

作者:半吊子全栈工匠2025.09.26 12:04浏览量:1

简介:本文详细介绍在SpringBoot项目中集成MyBatis-Plus时,如何配置分页插件、使用条件构造器进行动态查询,以及开启SQL日志打印功能,助力开发者高效构建数据访问层。

一、引言

在SpringBoot项目中,MyBatis-Plus作为MyBatis的增强工具,提供了丰富的功能简化数据库操作。本文将重点围绕MyBatis-Plus的分页插件条件查询以及SQL打印开启三个核心功能展开,帮助开发者快速掌握这些关键特性的使用方法,提升开发效率。

二、分页插件配置与使用

2.1 分页插件的作用

分页是Web应用中常见的需求,MyBatis-Plus内置的分页插件能够自动拦截SQL语句,添加分页参数(如LIMIT offset, size),无需手动编写分页逻辑,极大简化了分页功能的实现。

2.2 配置步骤

2.2.1 添加依赖

确保项目中已引入MyBatis-Plus依赖:

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>最新版本</version>
  5. </dependency>

2.2.2 配置分页插件

在SpringBoot的配置类中添加分页插件:

  1. @Configuration
  2. public class MybatisPlusConfig {
  3. @Bean
  4. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  5. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  6. // 添加分页插件
  7. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  8. return interceptor;
  9. }
  10. }
  • DbType.MYSQL:根据数据库类型选择,如Oracle、PostgreSQL等。

2.3 使用分页查询

在Service层调用分页方法:

  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserMapper userMapper;
  5. @Override
  6. public IPage<User> getUserPage(int current, int size) {
  7. // 创建分页对象
  8. Page<User> page = new Page<>(current, size);
  9. // 执行分页查询
  10. return userMapper.selectPage(page, null);
  11. }
  12. }
  • current:当前页码。
  • size:每页显示条数。
  • selectPage:第一个参数为分页对象,第二个参数为查询条件(可为null)。

三、条件查询(Wrapper使用)

3.1 条件构造器概述

MyBatis-Plus提供了QueryWrapperLambdaQueryWrapper等条件构造器,支持链式调用,能够灵活构建动态SQL查询条件,避免手写SQL字符串,提高代码可读性和安全性。

3.2 常用方法示例

3.2.1 基础条件查询

  1. // 查询年龄大于18的用户
  2. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  3. wrapper.gt(User::getAge, 18);
  4. List<User> users = userMapper.selectList(wrapper);
  • gt:大于(Greater Than)。
  • eq:等于。
  • lt:小于。
  • like:模糊查询。

3.2.2 多条件组合

  1. // 查询年龄大于18且名字包含"张"的用户
  2. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  3. wrapper.gt(User::getAge, 18)
  4. .like(User::getName, "张");
  5. List<User> users = userMapper.selectList(wrapper);

3.2.3 排序

  1. // 按年龄降序查询
  2. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  3. wrapper.orderByDesc(User::getAge);
  4. List<User> users = userMapper.selectList(wrapper);

3.2.4 空值判断

  1. // 动态构建查询条件(避免NPE)
  2. String name = "张三"; // 可能为null
  3. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  4. wrapper.eq(name != null, User::getName, name);
  5. List<User> users = userMapper.selectList(wrapper);
  • eq(condition, column, value):当condition为true时,添加等值条件。

四、SQL打印开启

4.1 为什么需要SQL打印?

在开发过程中,开启SQL打印能够直观看到MyBatis-Plus实际执行的SQL语句,便于调试和优化,尤其在复杂查询或分页场景下,能够快速定位问题。

4.2 配置方式

4.2.1 application.yml配置

  1. mybatis-plus:
  2. configuration:
  3. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • log-impl:指定日志实现类,StdOutImpl表示输出到控制台。

4.2.2 日志级别调整

确保日志级别设置为DEBUG,以便输出SQL:

  1. logging:
  2. level:
  3. com.baomidou.mybatisplus: debug
  4. 你的Mapper包路径: debug

4.2.3 使用Logback或Log4j2

若项目使用Logback或Log4j2,可在配置文件中添加:

Logback示例(logback-spring.xml)

  1. <logger name="com.baomidou.mybatisplus" level="DEBUG"/>
  2. <logger name="你的Mapper包路径" level="DEBUG"/>

Log4j2示例(log4j2.xml)

  1. <Logger name="com.baomidou.mybatisplus" level="debug"/>
  2. <Logger name="你的Mapper包路径" level="debug"/>

4.3 效果验证

启动应用后,执行数据库操作,控制台应输出类似以下内容:

  1. ==> Preparing: SELECT id, name, age FROM user WHERE age > ? AND name LIKE ?
  2. ==> Parameters: 18(Integer), %张%(String)
  3. <== Total: 1

五、最佳实践与注意事项

  1. 分页插件性能:大数据量分页时,建议使用PaginationInnerInterceptormaxLimit属性限制最大分页大小,避免深度分页导致性能问题。

    1. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL) {
    2. @Override
    3. public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
    4. // 限制最大分页大小
    5. if (rowBounds.getLimit() > 1000) {
    6. throw new RuntimeException("分页大小不能超过1000");
    7. }
    8. }
    9. });
  2. 条件查询安全性:使用LambdaQueryWrapper而非字符串拼接,避免SQL注入风险。

  3. SQL打印生产环境禁用:在生产环境中,建议关闭SQL打印或调整为WARN级别,避免日志量过大。

  4. 多数据源支持:若项目使用多数据源,需为每个数据源配置独立的分页插件。

六、总结

本文详细介绍了MyBatis-Plus在SpringBoot项目中的三大核心功能:分页插件条件查询以及SQL打印开启。通过分页插件,开发者能够轻松实现高效的分页查询;条件构造器则提供了灵活的动态SQL构建方式;而SQL打印功能则为调试和优化提供了有力支持。掌握这些特性,将显著提升数据库操作的开发效率和代码质量。

相关文章推荐

发表评论

活动