💡 前言
在现代企业级应用开发中,数据库操作是必不可少的一部分。传统的 MyBatis 虽然功能强大,但在面对 CRUD 操作时显得有些繁琐。为了解决这个问题,MyBatis-Plus 应运而生,它是一款基于 MyBatis 的增强工具,简化了大量重复的 CRUD 代码编写工作,并提供了更多实用的功能。
本文将详细介绍如何在 Spring Boot 项目中整合 MyBatis-Plus,包括:
- 快速集成 MyBatis-Plus
 - 基本增删改查操作
 - 分页查询、条件构造器
 - 自动填充、逻辑删除等高级特性
 - 性能优化与最佳实践
 
无论你是初学者还是有一定经验的开发者,这篇文章都能帮助你快速上手 MyBatis-Plus,提升开发效率!
🛠️ 一、Spring Boot 整合 MyBatis-Plus 步骤
Step 1:添加依赖
首先,在 pom.xml 文件中添加 MyBatis-Plus 和数据库驱动的依赖(以 MySQL 为例):
            
            
              xml
              
              
            
          
          <dependencies>
    <!-- Spring Boot Starter for MyBatis Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.1</version>
    </dependency>
    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>
        Step 2:配置数据源
在 application.yml 中配置数据库连接信息:
            
            
              yaml
              
              
            
          
          spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver
        Step 3:创建实体类和 Mapper 接口
假设我们有一个用户表 user,包含字段 id, name, age 等。
实体类:
            
            
              java
              
              
            
          
          @TableName("user")
public class User {
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String name;
    
    private Integer age;
    // getters and setters...
}
        Mapper 接口:
            
            
              java
              
              
            
          
          @Mapper
public interface UserMapper extends BaseMapper<User> {
}
        注意:@Mapper 注解用于标识这是一个 MyBatis 的 Mapper 接口,或者你也可以使用 @MapperScan 注解来扫描整个包下的所有 Mapper 接口。
🔁 二、基本增删改查操作
✅ 插入数据
            
            
              java
              
              
            
          
          @Autowired
private UserMapper userMapper;
public void insertUser() {
    User user = new User();
    user.setName("John");
    user.setAge(25);
    userMapper.insert(user);
}
        ✅ 查询数据
            
            
              java
              
              
            
          
          public User getUserById(Long id) {
    return userMapper.selectById(id);
}
        ✅ 更新数据
            
            
              java
              
              
            
          
          public void updateUser() {
    User user = new User();
    user.setId(1L);
    user.setAge(30);
    userMapper.updateById(user);
}
        ✅ 删除数据
            
            
              java
              
              
            
          
          public void deleteUser(Long id) {
    userMapper.deleteById(id);
}
        🎯 三、高级特性详解
✅ 1. 分页查询
MyBatis-Plus 提供了内置的分页插件,使用非常方便。
首先,在配置类中启用分页插件:
            
            
              java
              
              
            
          
          @Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}
        然后,你可以像下面这样进行分页查询:
            
            
              java
              
              
            
          
          public Page<User> getUsersByPage(int currentPage, int pageSize) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    Page<User> page = new Page<>(currentPage, pageSize);
    return userMapper.selectPage(page, queryWrapper);
}
        ✅ 2. 条件构造器
MyBatis-Plus 提供了强大的条件构造器 QueryWrapper 和 UpdateWrapper,可以轻松构建复杂的查询和更新条件。
查询示例:
            
            
              java
              
              
            
          
          QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John").gt("age", 20);
List<User> users = userMapper.selectList(queryWrapper);
        更新示例:
            
            
              java
              
              
            
          
          UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "John").set("age", 28);
userMapper.update(null, updateWrapper);
        ✅ 3. 自动填充
自动填充功能可以在插入或更新记录时自动设置某些字段的值,比如创建时间和更新时间。
首先,定义一个注解处理器:
            
            
              java
              
              
            
          
          @Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}
        然后,在实体类中使用 @TableField 注解标记需要自动填充的字段:
            
            
              java
              
              
            
          
          @TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
        ✅ 4. 逻辑删除
逻辑删除是指不真正删除数据,而是通过标记字段来表示该条记录已被删除。MyBatis-Plus 支持逻辑删除功能。
首先,在实体类中指定逻辑删除字段:
            
            
              java
              
              
            
          
          @TableLogic
private Integer deleted;
        然后,在执行删除操作时,MyBatis-Plus 会自动将 deleted 字段设为 1,而不是物理删除记录。
🧩 四、常见问题与解决方案
| 问题 | 解决方案 | 
|---|---|
| 查询结果为空 | 检查 SQL 语句是否正确,确认表结构和字段名一致 | 
| 插入失败 | 确认主键策略是否正确,检查外键约束 | 
| 性能问题 | 使用索引优化查询,避免全表扫描 | 
📘 五、总结对比表
| 功能 | 描述 | 
|---|---|
| 数据源配置 | 支持多种数据库类型,如 MySQL、PostgreSQL 等 | 
| 增删改查 | 提供简洁的 API,减少样板代码 | 
| 分页查询 | 内置分页插件,支持多数据库 | 
| 条件构造器 | 构建复杂查询条件,提高灵活性 | 
| 自动填充 | 简化创建时间、更新时间等字段的维护 | 
| 逻辑删除 | 避免物理删除数据,便于数据恢复 | 
🎁 六、结语
MyBatis-Plus 是一款非常优秀的 MyBatis 增强工具,它极大地简化了持久层开发的工作量,提升了开发效率。通过本文的学习,你应该已经掌握了如何在 Spring Boot 项目中整合 MyBatis-Plus,并能够熟练运用其提供的各种功能来完成日常的 CRUD 操作。
无论是企业级后台系统、电商平台,还是微服务架构,MyBatis-Plus 都能为你提供强有力的支持。
🎯 点赞、收藏、转发本文,让更多开发者受益!