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 高效開發 🚀