news 2026/5/12 3:35:34

【后端】【Java】一文详解为什么互联网公司更偏向 MyBatis,而不是 JPA?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【后端】【Java】一文详解为什么互联网公司更偏向 MyBatis,而不是 JPA?

为什么大多数互联网公司更偏向 MyBatis,而不是 JPA?

为什么互联网公司更偏向 MyBatis,而不是 JPA?

在很多互联网公司(阿里系、字节、腾讯、美团等)中,你会发现一个现象:

👉核心业务系统几乎清一色用 MyBatis(或 MyBatis Plus)
👉JPA 更多出现在中小项目、后台系统或内部工具

这并不是“JPA 不好”,而是互联网公司的技术诉求,天然更匹配 MyBatis

下面我们从多个维度拆解这个选择背后的原因。


一、互联网业务的本质:复杂 SQL + 极致性能

1️⃣ 互联网业务不是“CRUD 为主”

互联网系统常见特点:

  • 数据量大(千万 / 亿级)

  • SQL 复杂(多表 join / 子查询 / 聚合)

  • 报表、推荐、统计频繁

  • 性能要求极高(毫秒级)

📌而这些,正是 JPA 的“非舒适区”


2️⃣ MyBatis 是“SQL 驱动”的框架

MyBatis 的设计哲学:

SQL 是一等公民

<select> select u.id, u.name, count(o.id) orderCount from user u left join order o on u.id = o.user_id where u.status = 1 group by u.id </select>

👉 SQL 怎么写,数据库就怎么跑
👉执行计划可控、性能可预测


二、性能“可控性”是互联网公司的第一优先级

1️⃣ MyBatis 的性能是“显式”的

  • SQL 明确

  • 是否走索引清清楚楚

  • 一条方法 = 一条 SQL

📌 出问题时:

  • 看 SQL

  • 看执行计划

  • 看索引

定位路径非常短


2️⃣ JPA 的性能是“隐式”的

save(entity);

背后可能发生:

  • select

  • update

  • flush

  • cascade

  • dirty check

📌你没写 SQL,但 SQL 已经跑了

在高并发场景:

  • 问题难复现

  • 行为难预测

  • 调优成本极高


三、复杂 SQL 在 JPA 中是“灾难级体验”

1️⃣ JPQL / Criteria API 可读性差

CriteriaBuilder cb = em.getCriteriaBuilder();

📌 实话实说:

  • 可读性差

  • 学习成本高

  • 调试困难

对比 MyBatis:

select * from order where status = 1 limit 100

👉SQL 即文档


2️⃣ JPA 难以表达数据库特性

JPA 的目标是:

屏蔽数据库差异

但互联网公司恰恰要用:

  • MySQL 索引 Hint

  • 分库分表语法

  • 特定函数

  • 自定义优化 SQL

📌 MyBatis:直接写
📌 JPA:绕路 or 放弃


四、团队协作:MyBatis 更符合“大团队工程化”

1️⃣ 前后端 / DBA / 后端协作成本

在互联网公司:

  • DBA 会 review SQL

  • 架构师关注执行计划

  • 后端关注代码结构

📌 MyBatis:

  • SQL 明文

  • 所有人都能看懂

📌 JPA:

  • SQL 运行时生成

  • DBA 无法提前介入


2️⃣ MyBatis 更利于代码评审(CR)

<select id="listHotUsers">
  • SQL 是否合理,一眼可见

  • 是否有索引,一看就知道

JPA:

findByUserStatusAndCreateTimeBetween()

👉你得脑补 SQL


五、互联网公司更害怕“不可预期行为”

JPA 的几个高危点

风险说明
N+1 查询一不小心就炸
自动 flush查询前偷偷 update
脏检查CPU 消耗不可控
级联save 引发雪崩
懒加载线上常见事故

📌 这些问题:

  • 不是“写错”

  • 而是“没意识到”

👉互联网公司更倾向“显式控制”


六、历史原因:国内技术栈的演进路径

国内主流路径:

JDBC ↓ MyBatis ↓ MyBatis-Plus
  • 大量老系统

  • 大量 SQL 资产

  • 成熟的使用规范

  • 完整的最佳实践

📌 切换到 JPA 的收益不明显,但风险很大


七、JPA 真的不适合互联网吗?

❌ 不是

JPA 非常适合:

  • 后台管理系统

  • 内部工具

  • 小型项目

  • CRUD 密集型服务

  • 表结构稳定的系统

📌 只是不适合“核心高并发业务”


八、真实的一线最佳实践(非常重要)

MyBatis + JPA 混合使用

  • JPA:

    • 简单 CRUD

    • 快速开发

  • MyBatis:

    • 核心链路

    • 复杂 SQL

    • 性能敏感路径

这是很多中大型互联网公司的真实架构选择


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 2:13:58

Locale Emulator终极指南:轻松搞定多语言软件运行难题

Locale Emulator终极指南&#xff1a;轻松搞定多语言软件运行难题 【免费下载链接】Locale-Emulator Yet Another System Region and Language Simulator 项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator 还记得那个让你抓狂的下午吗&#xff1f;你兴冲冲…

作者头像 李华
网站建设 2026/5/9 2:25:42

WorkshopDL:非Steam玩家轻松获取创意工坊模组的终极解决方案

WorkshopDL&#xff1a;非Steam玩家轻松获取创意工坊模组的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为无法访问Steam创意工坊而烦恼吗&#xff1f;Work…

作者头像 李华
网站建设 2026/5/8 21:32:56

轻松健康赴港IPO:一场成功的AI自救

12月15日&#xff0c;轻松健康集团正式启动招股&#xff0c;这意味着他们成功闯关港股IPO。轻松健康的前身是轻松筹&#xff0c;虽然起步比较早&#xff0c;不过随后他们很快被水滴公司实现了反超&#xff0c;甚至还开始面临流量红利见顶的困境。于是&#xff0c;轻松健康集团开…

作者头像 李华
网站建设 2026/5/9 1:32:06

LobeChat无障碍访问a11y改进方案

LobeChat无障碍访问a11y改进方案 在AI聊天工具日益普及的今天&#xff0c;我们常常被炫酷的交互、强大的模型和丰富的插件所吸引。但有一个群体的声音却很少被听见&#xff1a;那些依赖键盘导航、屏幕阅读器或高对比度模式来使用数字产品的用户。他们可能是视障人士、手部运动受…

作者头像 李华
网站建设 2026/5/9 2:00:38

LobeChat本地化部署成本核算:比公有云便宜多少?

LobeChat本地化部署成本核算&#xff1a;比公有云便宜多少&#xff1f; 在企业AI应用逐渐从“尝鲜”走向“刚需”的今天&#xff0c;一个现实问题浮出水面&#xff1a;我们真的需要为每一次提问向云端支付费用吗&#xff1f;当团队每天调用数千次模型、生成百万Token内容时&…

作者头像 李华
网站建设 2026/5/9 2:11:12

21、Linux 网络配置与故障排查全攻略

Linux 网络配置与故障排查全攻略 1. 更改 IP 路由表 route 命令不仅可以用于查看路由表,还能对其进行修改。不过在操作时要格外小心,因为错误的修改可能会破坏网络连接,使计算机无法联网。 1.1 添加网关 假设你的计算机经常丢失网关,导致数据包无法从局域网发送到互联…

作者头像 李华