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

相关推荐
我命由我123451 天前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
晚安code1 天前
Java 异常与日志规范:错误码、异常处理、日志规约一次讲清
java
深海呐1 天前
仓颉语言是ArkTs的上层语言吗?就像kotlin和Java
java·开发语言·kotlin·仓颉
隔窗听雨眠1 天前
OceanBase旁路导入与自增主键冲突深度解析:原理、排查与解决方案
java·服务器·数据库
ZCBUS实时计算1 天前
政务海量分库分表汇聚实战:基于 3 节点 ZCBUS 集群完成医保 10TB 数据实时整合
大数据·数据库·数据仓库·sql·dba·etl·政务
名不经传的养虾人1 天前
从0到1:企业级AI项目迭代日记 Vol.81|工具调用前,先过一道审批门
数据库·人工智能·ai编程·ai工作流·企业ai
白露与泡影1 天前
聊聊物联网Java后端的核心技术难点(水表/电表/充电桩实战)
java·开发语言·物联网
Databend1 天前
Databend 产品更新:从 Spatial Index Join 到 Eval 数据管道
大数据·数据库·sql
数据知道1 天前
SQL 注入从入门到精通:手工注入 + sqlmap 自动化
网络·数据库·sql·网络安全·自动化
lilian2331 天前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos