当前位置: 首页 > news >正文

【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. 常用增强功能

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

10. 总结

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

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

http://www.dtcms.com/a/335369.html

相关文章:

  • 计算机网络 HTTP和HTTPS 区别
  • Rust 条件语句
  • deepseek一键生成word和excel并一键下载
  • 初识CSS
  • [python学习记录1]python简介
  • SHAP分析!NRBO-Transformer-BiLSTM回归预测SHAP分析,深度学习可解释分析!
  • KingbaseES:一体化架构与多层防护,支撑业务的持续稳定运行与扩展
  • 智能制造——解读车企数字化转型构建高效经营管理数据治理体系【附全文阅读】
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day6
  • 【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数),视频保存在指定位置
  • RH134 访问网络附加存储知识点
  • 解密红外温度芯片的“工作环境温度” 范围
  • 论文推荐|迁移学习+多模态特征融合
  • 存储、硬盘、文件系统、 IO相关常识总结
  • CPP多线程1:C++11的std::thread
  • 再发一篇博客
  • 10.从开始写LINUX内核——时钟中断
  • 从零开始构建在线语言翻译网站:完整开发指南
  • 批次防混的“电子锁”:浪智WMS系统 如何用绑定技术终结出入库乱局
  • 深入理解 Python 元类中的 __prepare__ 方法:掌控类属性定义顺序的艺术
  • 【Html网页模板】赛博朋克数据分析大屏网页
  • 聊聊智慧这个东西之三:从食物的毒性、偏性聊起
  • 一种采用双PID串级控制的双轮自平衡车的研制-论文复现与分析
  • 使用影刀RPA实现快递信息抓取
  • XSS攻击:从原理入门到实战精通详解
  • Python代码规范与静态检查(ruff/black/mypy + pyproject.toml + Makefile)自动化工具链介绍
  • 8.从零开始写LINUX内核——初始化中断控制芯片
  • 实时计算 记录
  • 小杨的H字矩阵-洛谷B3924 [GESP202312 二级]
  • Python环境下载安装、以及环境配置教程(Windows版)