mybatis-plus-base
MyBatis-Plus 基础
MyBatis-Plus(简称 MP)可以说是 MyBatis 的“增强版”。它不是为了替代 MyBatis,而是在其基础上做了增强,让你能更轻松地操作数据库。简单来说,使用它之后,很多基础的增删改查(CRUD)工作你甚至可以不用写一行 SQL 代码,开发效率会大大提高。
💡 核心原理:只做增强,不改动MyBatis
MP 的设计理念是在 MyBatis 的基础上“只做增强,不做改变”。这意味着你原有的 MyBatis 代码和功能完全不受影响,你只需要添加 MP 的依赖,就能在需要的地方使用它提供的强大功能,整个过程非常顺滑。
🚀 快速上手:3分钟跑通流程
引入依赖:创建一个 Spring Boot 工程,添加 MP 和数据库驱动依赖。注意! 要移除或注释掉原有的
mybatis和mybatis-spring依赖,以避免版本冲突。配置数据源:在
application.yml或application.properties文件中,像配置普通 MyBatis 一样,配置数据库连接信息。编写实体和Mapper:创建一个实体类(例如
User),再写一个 Mapper 接口继承 MP 的BaseMapper。
java1
2
3
4// 让 UserMapper 继承 MyBatis-Plus 提供的 BaseMapper
public interface UserMapper extends BaseMapper<User> {
// 里面甚至可以什么都不用写
}至此,
UserMapper就拥有了insert、selectById、updateById、deleteById等近 20 个单表操作方法,可以直接在 Service 层调用,非常方便。
🏷️ 常用注解:为实体类建立数据库映射
为了让 MP 知道你的实体类对应数据库中的哪张表、哪个字段,你需要使用以下注解:
- @TableName:标注在实体类上,指定其映射的数据库表名。如果类名和表名一致,则可以省略。
- @TableId:标注在实体类的主键字段上,用于指定该字段为主键。它支持多种主键生成策略,如
IdType.AUTO(数据库自增)、IdType.ASSIGN_ID(雪花算法,MP 默认)等。 - @TableField:标注在非主键字段上,用于处理字段名不一致或特殊字段。比如,当 Java 实体中的
userName字段对应数据库表中的user_name字段时,就需要使用此注解。 - @TableLogic:用于逻辑删除字段,MP 会自动在查询时过滤掉已删除的数据。
- @Version:用于乐观锁的版本号字段。
🎣 条件构造器:告别复杂SQL的烦恼
条件构造器是 MP 的核心功能,它允许你用 Java 代码来“编织”复杂的 SQL 查询条件,主要分为两种:
- QueryWrapper / UpdateWrapper:直接以字符串形式传入数据库字段名,更接近原生 SQL 的写法。
- LambdaQueryWrapper / LambdaUpdateWrapper:通过 Lambda 表达式引用实体类的属性(如
User::getAge),这种方式是类型安全的,强烈推荐使用,因为它能让你的代码更健壮,即使重构实体类字段名也不会导致未知的 SQL 错误。
⚙️ 核心功能一览:开箱即用的强大武器
- 通用 CRUD 与 Service 封装:除了
BaseMapper,MP 也提供了IService接口和ServiceImpl实现类,封装了更多批量操作,让 Service 层的代码也能快速搭建。 - 分页查询:通过
PaginationInnerInterceptor插件实现物理分页。只需将Page对象作为第一个参数传递给 Mapper 方法,MP 会自动处理分页 SQL 和总数查询,并对所有数据库使用方言。 - 乐观锁:通过
@Version注解和插件,解决数据更新并发冲突。比如处理秒杀等场景。更新时会检查版本号,它必须与查询时的版本号一致才能更新成功,否则会失败。 - 逻辑删除:通过
@TableLogic注解,用标记代替物理删除(UPDATE ... SET deleted=1),查询时会自动过滤掉已标记的记录,为数据恢复提供可能,保障数据安全。 - 自动填充:通过实现
MetaObjectHandler接口,为create_time、update_time等字段自动填充值,避免重复代码。 - 代码生成器:它能根据数据库表结构,反向生成 Entity、Mapper、Service、Controller 等各层的基础代码。开发测试阶段还可以配置性能分析插件来监控 SQL 执行情况,定位慢查询。
- 多数据源:在需要连接多个数据库时,官方推荐使用
dynamic-datasource这个第三方插件,配置清晰,使用方便。 - 预防误操作:内置的全局拦截插件,可以智能阻断恶意的全表
delete或update操作,防止数据灾难。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小徐的博客!
评论




