mybatis-plus 是对 mybatis 的增强而非替代,通过继承 basemapper 提供开箱即用的 crud、类型安全的条件构造器、自动分页、审计字段填充、批量操作及逻辑删除等功能,大幅减少模板代码。

MyBatis-Plus(MP)不是替代 MyBatis,而是“站在 MyBatis 肩膀上做减法”——它保留全部 MyBatis 兼容性,同时把单表 CRUD 中重复、机械、易出错的环节全收编为开箱即用的能力。真正实现「写一个接口,拿一整套 CRUD」。
不用写 XML 和基础 SQL
原生 MyBatis 每张表都要建 UserMapper.xml,手写 insert into user...、select * from user where id = ? 等 5–10 条固定 SQL;MP 只需定义空接口继承 BaseMapper<user></user>,insert()、selectById()、deleteById() 等 17+ 方法自动可用,SQL 由框架按命名规范动态生成,零 XML、零 SQL 文件。
条件查询不再拼字符串
原生 MyBatis 写多条件查询得靠 <if test="name != null"></if> 堆 XML,或手拼 "WHERE status = " + status + " AND name LIKE '%" + keyword + "%",容易 SQL 注入且难维护;MP 提供 QueryWrapper 和类型安全的 LambdaQueryWrapper,例如:
lambdaQueryWrapper.eq(User::getStatus, 1).like(User::getName, "李")lambdaQueryWrapper.between(User::getCreateTime, start, end).orderByDesc(User::getId)
字段名由 Lambda 表达式锁定,编译期校验,重构时自动同步,不拼字符串、不担心错别字。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
分页和审计字段两行配置就生效
原生 MyBatis 分页要手动写 count 查询 + limit 查询,每换一张表就得复制粘贴改一遍;MP 配一个 PaginationInnerInterceptor Bean,所有 selectPage(new Page(1, 10), wrapper) 自动注入 count 和分页逻辑,SQL 层面完全透明。
创建时间、更新时间这类审计字段,原生方式常在 Service 层反复写 user.setCreateTime(new Date()),漏一次就留隐患;MP 用 @TableField(fill = FieldFill.INSERT) 标注字段,再实现 MetaObjectHandler,插入/更新时自动填充,业务代码里彻底消失。
批量操作和逻辑删除开箱即用
原生 MyBatis 批量插入需自己写 foreach 循环或调用 JDBC Batch,MP 的 saveBatch()、updateBatchById() 直接支持 List 入参,底层自动合并执行;逻辑删除也不再需要改所有 SQL 加 AND deleted = 0,只需配置 logic-delete-field 和 logic-delete-value,MP 全局拦截并重写 WHERE 条件。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










