mybatis-plus依赖(保姆级教程)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在 Java 后端开发领域,MyBatis 作为轻量级持久层框架,凭借其灵活性和简洁性深受开发者青睐。而 MyBatis-Plus 依赖的引入,进一步简化了数据操作的复杂度,通过提供代码生成器、通用 Mapper、条件构造器等特性,显著提升了开发效率。对于编程初学者而言,理解 MyBatis-Plus 的依赖体系是迈向高效开发的关键一步;对于中级开发者,掌握其依赖的配置优化与高级功能,则能更好地应对复杂业务场景。本文将从基础到进阶,结合实际案例,深入解析 MyBatis-Plus 依赖的核心知识点。
一、MyBatis-Plus 依赖的引入与基础配置
1.1 Maven 依赖管理
MyBatis-Plus 的核心依赖通过 Maven 坐标引入,开发者需在项目的 pom.xml
文件中添加以下配置:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version> <!-- 根据需求选择版本 -->
</dependency>
这一依赖包含了 MyBatis-Plus 的核心功能,如 IService
接口、QueryWrapper
条件构造器等。此外,若需使用代码生成器,还需添加:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
比喻:
将 MyBatis-Plus 比作乐高积木,基础依赖是搭建框架的“底盘”,而其他扩展模块(如代码生成器、分页插件)则是可选的“功能组件”,开发者可根据需求自由组合。
1.2 核心依赖的配置优化
引入依赖后,需通过 Spring Boot 的配置类激活 MyBatis-Plus 的功能。例如:
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
这段代码配置了分页插件,解决了传统分页需手动拼接 SQL 的痛点。通过 PaginationInnerInterceptor
,开发者只需调用 Page<YourEntity>.pages()
即可实现分页查询。
二、MyBatis-Plus 依赖的核心模块解析
2.1 通用 Mapper 与 Service
MyBatis-Plus 的核心优势之一是 零配置的通用 Mapper。开发者无需手写 BaseMapper
接口,只需在 Service 层继承 ServiceImpl
:
public interface UserService extends IService<User> {}
通过这种方式,save
、update
、delete
等基础操作均可直接调用,省去了传统 MyBatis 中 XML 文件的编写。
案例说明:
假设有一个用户表,对应的实体类 User
需要实现增删改查。使用 MyBatis-Plus 依赖后,代码简化如下:
// 增加用户
User user = new User();
user.setName("张三");
userService.save(user);
// 查询用户
User queryUser = userService.getById(1L);
2.2 条件构造器 QueryWrapper
MyBatis-Plus 的 QueryWrapper
提供了链式调用的条件构造能力,避免了拼接 SQL 的繁琐操作。例如:
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 18)
.likeRight("name", "李")
.orderByDesc("create_time");
List<User> users = userService.list(wrapper);
这段代码实现了“年龄等于 18 岁、姓名以‘李’结尾、按创建时间降序排列”的查询逻辑。
比喻:
QueryWrapper
相当于 SQL 语句的“智能翻译器”,将面向对象的代码逻辑自动转换为高效的 SQL 语句,开发者无需关心底层实现。
2.3 分页插件与性能优化
通过 PaginationInnerInterceptor
分页插件,MyBatis-Plus 实现了数据库无关的分页逻辑。例如:
Page<User> page = new Page<>(1, 10);
Page<User> result = userService.page(page, new QueryWrapper<>());
此插件会自动将分页参数转换为对应的 SQL 片段(如 MySQL 的 LIMIT
),避免了手动拼接分页参数导致的代码冗余。
三、MyBatis-Plus 依赖的高级特性与实战案例
3.1 代码生成器的自动化开发
MyBatis-Plus 的代码生成器可自动生成实体类、Mapper、Service 等基础代码,极大提升了开发效率。例如:
AutoGenerator mpg = new AutoGenerator();
mpg.setGlobalConfig(...); // 全局配置
mpg.setDataSource(...); // 数据源配置
mpg.setPackageInfo(...); // 包路径配置
mpg.setStrategy(...); // 策略配置(如下划线转驼峰)
mpg.execute();
运行后,系统会根据数据库表结构生成完整的代码框架,开发者仅需关注业务逻辑的实现。
3.2 自定义 SQL 与动态 SQL
尽管 MyBatis-Plus 提供了大量便捷功能,但在复杂查询场景下仍需编写自定义 SQL。此时可通过 @Select
注解或 XML 文件实现:
@Select("SELECT * FROM user WHERE age > #{age} AND name LIKE CONCAT('%', #{name}, '%')")
List<User> customQuery(@Param("age") int age, @Param("name") String name);
关键点:
在使用自定义 SQL 时,需确保实体类字段与数据库字段的命名一致,或通过 @TableField
注解明确映射关系。
3.3 版本兼容性与依赖冲突排查
在引入 MyBatis-Plus 依赖时,需注意版本兼容性问题。例如:
- Spring Boot 2.x 系列应使用 MyBatis-Plus 3.4.x 以下版本
- Spring Boot 3.x 需升级到 MyBatis-Plus 3.5.x
若出现依赖冲突(如不同版本的 MyBatis 核心库),可通过 Maven 的 <exclusion>
标签排除多余依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-...</artifactId>
</exclusion>
</exclusions>
</dependency>
四、MyBatis-Plus 依赖的最佳实践与性能调优
4.1 逻辑删除与乐观锁
通过 @TableLogic
注解实现逻辑删除,避免直接删除数据导致的数据丢失风险。例如:
@Data
public class User {
@TableLogic
private Integer is_deleted; // 默认值为 0(未删除)
}
调用 remove
方法时,数据会被标记为删除而非物理删除。
4.2 事务管理与多数据源
在复杂业务场景中,可通过 @Transactional
注解管理事务,并结合 AbstractRoutingDataSource
实现多数据源动态切换:
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dynamicDataSource() {
DynamicDataSource dataSource = new DynamicDataSource();
dataSource.setTargetDataSources(...); // 配置多个数据源
return dataSource;
}
}
此功能适用于读写分离或跨库操作的场景。
五、总结与展望
MyBatis-Plus 依赖的引入,标志着 Java 后端开发从“手动编写 SQL”向“声明式编程”的重要进化。通过本文的讲解,读者应能掌握以下核心能力:
- 正确配置和优化 MyBatis-Plus 依赖,提升开发效率;
- 灵活使用
QueryWrapper
、分页插件等核心工具; - 结合代码生成器和自定义 SQL,应对复杂业务需求;
- 处理依赖冲突与版本兼容性问题。
未来,随着 MyBatis-Plus 的持续迭代,其依赖生态将进一步完善。开发者需持续关注官方文档(MyBatis-Plus GitHub ),以掌握最新特性。建议读者通过实际项目实践,逐步深入理解 MyBatis-Plus 的设计哲学与底层原理,从而在技术道路上更进一步。