【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略

Spring Boot 集成 MyBatis-Plus 全攻略

1. 为什么选择 MyBatis-Plus

  • 零侵入:在 MyBatis 基础上增强,不影响现有功能。
  • 内置 CRUD :无需写 XML/SQL,直接调用 BaseMapper 方法。
  • 强大插件:分页插件、性能分析、乐观锁、多租户等。
  • 更少样板代码:节省 70% 以上 Mapper 层代码量。

2. 依赖配置

pom.xml

xml 复制代码
<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- MyBatis-Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.5</version>
    </dependency>

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

    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

3. 基础配置

application.yml

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root123
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true

4. 实体类

java 复制代码
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user") // 映射数据库表
public class User {
    @TableId
    private Long id;
    private String username;
    private String email;
}

5. Mapper 接口

java 复制代码
package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

✅ 继承 BaseMapper<User> 后,增删改查方法就全都有了。


6. Service 层

Service 接口

java 复制代码
package com.example.demo.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.entity.User;

public interface UserService extends IService<User> {
}

Service 实现

java 复制代码
package com.example.demo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

7. Controller

java 复制代码
package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    private final UserService userService;
    public UserController(UserService userService) {
        this.userService = userService;
    }

    // 查询所有
    @GetMapping
    public List<User> list() {
        return userService.list();
    }

    // 按ID查
    @GetMapping("/{id}")
    public User get(@PathVariable Long id) {
        return userService.getById(id);
    }

    // 新增
    @PostMapping
    public String add(@RequestBody User user) {
        userService.save(user);
        return "User added successfully!";
    }

    // 更新
    @PutMapping
    public String update(@RequestBody User user) {
        userService.updateById(user);
        return "User updated successfully!";
    }

    // 删除
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        userService.removeById(id);
        return "User deleted successfully!";
    }
}

8. 分页插件配置

在 Spring Boot 启动类或配置类中加入:

java 复制代码
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());
        return interceptor;
    }
}

使用:

java 复制代码
Page<User> page = new Page<>(1, 5);
Page<User> userPage = userService.page(page);

9. 常用增强功能

  1. 条件构造器(代替手写 SQL):
java 复制代码
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("username", "Tom");
List<User> users = userService.list(wrapper);
  1. Lambda 风格(类型安全):
java 复制代码
List<User> users = userService.lambdaQuery()
        .like(User::getUsername, "Tom")
        .orderByDesc(User::getId)
        .list();
  1. 批量操作
java 复制代码
userService.saveBatch(usersList);
  1. 乐观锁支持 :加上 @Version 注解 + 乐观锁插件。

10. 总结

  • 如果 SQL 比较简单,MyBatis-Plus 基本不需要写 Mapper XML。
  • 如果涉及复杂查询,可以 MP + 自定义 XML 混合使用。
  • 常见增强:分页、条件构造器、批量操作、乐观锁、多租户插件。

这样,就能快速从 MyBatis 手写 SQL 升级到 MyBatis-Plus 高效开发 🚀

相关推荐
腻害兔8 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖10 小时前
JDK 26 新特性详解
java·开发语言
马优晨11 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说13 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199414 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了15 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品15 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘15 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记15 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端