mabatis-plus 和mabatis 的区别

MyBatis-Plus 是 MyBatis 的增强工具,在 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,互不冲突。

相关推荐
云和数据.ChenGuang8 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠8 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试9 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767169 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_11 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
步行cgn12 小时前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc
摇滚侠12 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
小蒜学长12 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
Deng桑12 小时前
SpringAI写第一个Agent-把工单循环跑起来
java·agent·工具调用·spring ai
I Am a robert girl12 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放