Skip to content

MyBatis-Plus 零基础入门(Spring Boot 集成超详细版)


一、MyBatis-Plus 是什么?

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,无需编写重复 SQL即可实现数据库操作。它通过封装通用操作,让你专注于业务逻辑开发。

核心特点

  • 自动化 CRUD:继承 BaseMapper 后,无需手写增删改查 SQL
  • 灵活条件构造:通过 Java 代码拼接查询条件(如 age > 18 AND email IS NOT NULL
  • 开箱即用功能:分页、逻辑删除、自动生成 ID 等

比喻:MP 就像 MyBatis 的“自动驾驶系统”,帮你自动完成基础操作。


二、为什么要学 MyBatis-Plus?

✅ 三大核心优势

  1. 省时高效

    • 80% 的基础 SQL 自动生成(如 INSERT INTO user...
    • 示例:只需 userService.save(user) 即可新增数据
  2. 安全可靠

    • 使用 QueryWrapper 拼接条件,避免 SQL 注入风险

    • 示例:

      java
      queryWrapper.ge("age", 18).isNotNull("email");
  3. 功能强大

    • 分页查询只需一行代码:userService.page(new Page<>(1, 10))
    • 支持 Lambda 表达式,避免硬编码字段名

三、Spring Boot 集成 MyBatis-Plus 步骤

🧩 步骤 1:添加依赖(pom.xml

xml
<!-- MyBatis-Plus 核心 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- Lombok(推荐):自动生成 getter/setter -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

🗺️ 步骤 2:配置数据库连接(application.yml

yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 打印 SQL 日志

⚠️ 注意:

  • your_db 替换为你的数据库名
  • username/password 替换为你的数据库账号密码

🧱 步骤 3:创建实体类(与数据库表映射)

java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

@Data
public class User {
    @TableId(type = IdType.AUTO)  // 标记主键并设置自增
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

关键点:字段名需与数据库表字段名一致(如 name 字段)


🔧 步骤 4:创建 Mapper 接口

java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
    // 无需编写方法,继承 BaseMapper 后自动拥有增删改查功能
}

📦 步骤 5:创建 Service 层(推荐)

1. 定义 Service 接口

java
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
    // 可自定义业务方法
}

2. 实现 Service

java
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 继承后自动拥有所有 CRUD 方法
}

🔍 步骤 6:配置 Mapper 扫描

在 Spring Boot 启动类添加注解:

java
@MapperScan("com.example.mapper")  // 替换为你的 Mapper 包路径
@SpringBootApplication
public class MyBatisPlusDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisPlusDemoApplication.class, args);
    }
}

四、核心操作:CRUD 实战

✅ 准备:测试类模板

java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class UserTest {
    @Autowired
    private UserService userService;

    @Test
    void test() {
        // 测试代码
    }
}

1️⃣ 新增数据(Create)

java
@Test
void testAdd() {
    User user = new User();
    user.setName("李四");
    user.setAge(25);
    user.setEmail("li.si@example.com");

    boolean success = userService.save(user);
    System.out.println("新增成功:" + success);
}

2️⃣ 查询数据(Retrieve)

(1)根据 ID 查询

java
User user = userService.getById(1L);
System.out.println("用户信息:" + user);

(2)查询所有

java
List<User> users = userService.list();
users.forEach(System.out::println);

(3)条件查询

java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper
    .ge("age", 18)
    .isNotNull("email");

List<User> users = userService.list(wrapper);

(4)分页查询

java
Page<User> page = new Page<>(1, 2);  // 第1页,每页2条
IPage<User> result = userService.page(page);

System.out.println("总条数:" + result.getTotal());
result.getRecords().forEach(System.out::println);

⚠️ 注意:必须添加分页插件配置(见下文)


3️⃣ 更新数据(Update)

(1)根据 ID 更新

java
User user = new User();
user.setId(1L);
user.setAge(30);  // 只更新 age 字段

boolean success = userService.updateById(user);

(2)条件更新

java
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", "李四");

User user = new User();
user.setEmail("new.email@example.com");

userService.update(user, wrapper);

4️⃣ 删除数据(Delete)

(1)根据 ID 删除

java
userService.removeById(1L);

(2)条件删除

java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lt("age", 18);

userService.remove(wrapper);

五、核心 API 快速参考

🛠️ Service 层常用方法

方法说明示例
save(entity)新增userService.save(user)
removeById(id)根据 ID 删除userService.removeById(1L)
updateById(entity)根据 ID 更新userService.updateById(user)
list(wrapper)条件查询userService.list(wrapper)
page(page)分页查询userService.page(new Page<>(1, 10))

🔎 QueryWrapper 常用条件

方法说明示例
eq("age", 18)等于queryWrapper.eq("age", 18)
like("name", "张")模糊查询queryWrapper.like("name", "张")
between("age", 18, 30)范围查询queryWrapper.between("age", 18, 30)
orderByDesc("age")倒序排序queryWrapper.orderByDesc("age")

六、常见问题解答

❓ 1. 主键自增失败?

  • 原因:数据库表未设置自增
  • 解决
    • 在 Navicat 中将 id 字段设置为自增
    • 实体类添加 @TableId(type = IdType.AUTO)

❓ 2. 分页查询无效?

  • 原因:未配置分页插件
  • 解决:添加配置类:
java
@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

❓ 3. 字段名与数据库不一致?

  • 示例:表字段是 user_name,类属性是 userName
  • 解决:使用 @TableField 注解
java
@TableField("user_name")
private String userName;

❓ 4. Mapper 接口未被扫描?

  • 解决:检查启动类的 @MapperScan 路径是否正确

    java
    @MapperScan("com.example.mapper")  // 替换为你的实际包路径

七、总结 & 学习路径

🚀 推荐学习顺序

  1. 基础操作:掌握 save() / getById() / updateById()
  2. 条件查询:熟练使用 QueryWrapper 拼接条件
  3. 分页查询:配置分页插件 + 调用 page() 方法

📚 学习建议

  • 多动手:跟着教程写一遍代码,观察 SQL 输出
  • 善用文档MyBatis-Plus 官方文档
  • 逐步扩展:学会后再尝试乐观锁、逻辑删除等高级功能

通过本教程,你已掌握 MyBatis-Plus 的核心用法。继续实践,你将能高效处理数据库操作,告别冗余 SQL!

Released under the MIT License.