【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
Spring Boot 集成 MyBatis-Plus 全攻略
1. 为什么选择 MyBatis-Plus
- 零侵入:在 MyBatis 基础上增强,不影响现有功能。
- 内置 CRUD:无需写 XML/SQL,直接调用
BaseMapper
方法。 - 强大插件:分页插件、性能分析、乐观锁、多租户等。
- 更少样板代码:节省 70% 以上 Mapper 层代码量。
2. 依赖配置
pom.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
spring:datasource:url: jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: root123driver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus:mapper-locations: classpath*:mapper/*.xmlconfiguration:map-underscore-to-camel-case: true
4. 实体类
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 {@TableIdprivate Long id;private String username;private String email;
}
5. Mapper 接口
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 接口
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 实现
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
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;}// 查询所有@GetMappingpublic List<User> list() {return userService.list();}// 按ID查@GetMapping("/{id}")public User get(@PathVariable Long id) {return userService.getById(id);}// 新增@PostMappingpublic String add(@RequestBody User user) {userService.save(user);return "User added successfully!";}// 更新@PutMappingpublic 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 启动类或配置类中加入:
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 {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}
使用:
Page<User> page = new Page<>(1, 5);
Page<User> userPage = userService.page(page);
9. 常用增强功能
- 条件构造器(代替手写 SQL):
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("username", "Tom");
List<User> users = userService.list(wrapper);
- Lambda 风格(类型安全):
List<User> users = userService.lambdaQuery().like(User::getUsername, "Tom").orderByDesc(User::getId).list();
- 批量操作:
userService.saveBatch(usersList);
- 乐观锁支持:加上
@Version
注解 + 乐观锁插件。
10. 总结
- 如果 SQL 比较简单,MyBatis-Plus 基本不需要写 Mapper XML。
- 如果涉及复杂查询,可以 MP + 自定义 XML 混合使用。
- 常见增强:分页、条件构造器、批量操作、乐观锁、多租户插件。
这样,就能快速从 MyBatis 手写 SQL 升级到 MyBatis-Plus 高效开发 🚀