mabatis-plus 和mabatis 的区别

MyBatis-PlusMyBatis 的增强工具,在 MyBatis 的基础上做了扩展和封装,让开发更高效。以下是核心区别:


核心定位

表格

MyBatis MyBatis-Plus
定位 持久层框架 MyBatis 的增强插件/工具
关系 基础框架 基于 MyBatis,不能独立使用
开发方式 需手写大量 SQL/XML 提供通用 CRUD,减少手写 SQL

主要功能对比

表格

功能 MyBatis MyBatis-Plus
基础 CRUD 需手写 insert/update/delete/select 内置通用方法,直接调用,零 SQL
条件构造器 QueryWrapper / LambdaQueryWrapper 动态拼 SQL
分页插件 需自行实现或使用 PageHelper 内置分页插件,一行代码搞定
代码生成器 自动生成 Entity、Mapper、Service、Controller
主键策略 需配置或手写 内置雪花算法、自增等多种主键生成策略
逻辑删除 需自行实现 注解 @TableLogic 自动支持
自动填充 @TableField(fill = ...) 自动填充创建/更新时间
多租户/SQL 注入 需自行实现 内置插件支持
性能分析 内置 SQL 执行性能分析插件

代码对比示例

MyBatis 写法

java

复制

复制代码
// 需手写 XML 或注解 SQL
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);

@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insert(User user);

MyBatis-Plus 写法

java

复制

复制代码
// 继承 BaseMapper,自带全套 CRUD,无需写任何 SQL
public interface UserMapper extends BaseMapper<User> {}

// 直接使用
userMapper.selectById(1L);           // 根据 ID 查
userMapper.insert(user);             // 插入
userMapper.updateById(user);         // 根据 ID 更新
userMapper.deleteById(1L);           // 根据 ID 删除

MyBatis-Plus 条件构造器(动态 SQL)

java

复制

复制代码
// 复杂查询无需手写 SQL
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 18)
       .like(User::getName, "张")
       .orderByDesc(User::getCreateTime);

List<User> list = userMapper.selectList(wrapper);
// 自动生成: SELECT * FROM user WHERE age = 18 AND name LIKE '%张%' ORDER BY create_time DESC

如何选择?

表格

场景 建议
简单 CRUD 多、追求开发效率 MyBatis-Plus(推荐)
复杂 SQL 多、需要精细控制 MyBatis 原生 + Plus 混合使用
老项目维护、已有大量手写 SQL 保持 MyBatis 原生
新项目、Spring Boot 项目 直接用 MyBatis-Plus Starter

一句话总结

MyBatis 是"给你工具,你自己造";MyBatis-Plus 是"常用功能已经造好了,你直接用"。

两者可以完全共存------简单操作用 Plus 的通用方法,复杂业务写原生 MyBatis SQL,互不冲突。

相关推荐
2301_779622411 小时前
CSS Grid布局如何实现固定页脚效果_利用网格高度视口百分比单位
jvm·数据库·python
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
判断两个集合是不是相同
java
yexuhgu1 小时前
C#怎么实现线程安全的单例_C#如何使用Lazy延迟加载【核心】
jvm·数据库·python
huaiixinsi1 小时前
Canal + Outbox、Kafka 选型与高可用、Caffeine 底层原理总结
java·数据库·分布式·mysql·spring·adb·kafka
Ting-yu1 小时前
SpringCloud快速入门(11)---- Sentinel(异常处理)
java·spring boot·后端·spring·spring cloud·sentinel
X56611 小时前
什么是Bootstrap的移动优先响应式设计
jvm·数据库·python
m0_470857641 小时前
实现一个可精确定位、支持左右移动与删除的文本光标系统
jvm·数据库·python
m0_591364731 小时前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
代码中介商1 小时前
MySQL 核心进阶:事务、隔离级别与视图实战
数据库·mysql