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,互不冲突。

相关推荐
砍材农夫1 小时前
spring|spring web|拦截器、过滤器、aop
java·spring boot·spring·spring cloud
风哥2号2 小时前
数据库教程FGMT52‑PostgreSQL用户权限与安全管理
数据库·postgresql
mldong8 小时前
一个 App,十三套后端:手机审批端 uni-jeeflow-app 开源了
java·架构
风哥2号8 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
tqs_123459 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
YangYang9YangYan9 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
逆境不可逃9 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
Flynt10 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet10 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
西安栈上月明软件科技10 小时前
从业务黑话到本体图谱:OAG本体建模五步法(西安老系统AI化改造实战)
数据库·人工智能·架构