当前位置: 首页 > news >正文

【后端】【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

    • 性能敏感路径

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


http://www.cnnetsun.cn/news/97204.html

相关文章:

  • 悼词缅怀亲人:LobeChat传递真挚情感
  • LobeChat PCI-DSS支付安全建议
  • Obsidian Style Settings:终极自定义指南,轻松打造个性化笔记界面
  • 解锁 AI 潜力:9 大核心提示技巧,让交互更精准高效
  • zotero-style终极指南:5分钟打造智能文献管理神器
  • BetterNCM安装工具:3分钟快速上手网易云音乐插件终极指南
  • 思科DHCP服务1
  • 解锁Ryzen处理器性能的5大核心调试技术
  • LobeChat限时促销活动文案生成
  • LobeChat指标监控告警设置
  • LobeChat Hugging Face Model Hub直连:一键拉取热门模型
  • XiaoMusic:小爱音箱音乐播放的终极解决方案
  • LobeChat参会凭证短信内容
  • LobeChat活动报名确认邮件
  • LobeChat能否支持暗物质探测?宇宙未解之谜推理模拟器
  • LobeChat悼念辞撰写辅助工具
  • FreeMove神器:一键解决Windows系统盘空间危机
  • LobeChat二次验证说明文字
  • OneMore插件终极指南:如何快速实现OneNote页面目录自动置顶
  • OneMore插件终极指南:如何快速创建自动置顶的页面目录容器
  • SpringBoot+Vue 高校宣讲会管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Java SpringBoot+Vue3+MyBatis 供应商管理系统系统源码|前后端分离+MySQL数据库
  • Ofd2Pdf使用教程:从OFD到PDF的快速转换指南
  • 从信息到意义——为什么说整合信息论是一种关于意义的理论
  • 避免空白字符的To-Do应用开发
  • 超越-env-一份成熟的应用程序配置指南
  • 一文搞懂爬山算法!!!
  • 【金猿产品展】纷享销客——用智能科技和行业智慧赋能企业增长
  • Motrix浏览器扩展:重新定义你的下载体验
  • 20、量子计算中的线性代数基础