news 2026/4/2 13:28:42

【后端】【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/3/27 1:11:26

鸣潮自动化工具深度体验:3大核心功能带你轻松解放双手

鸣潮自动化工具深度体验&#xff1a;3大核心功能带你轻松解放双手 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为《…

作者头像 李华
网站建设 2026/3/31 4:21:36

揭秘AI原生应用在业务流程增强中的神奇功效

揭秘AI原生应用在业务流程增强中的神奇功效 关键词:AI原生应用、业务流程增强、智能决策、生成式AI、流程自动化、企业数字化、人机协同 摘要:本文将深入解析AI原生应用(AI-Native Application)如何通过深度融合生成式AI、大语言模型(LLM)等前沿技术,重构传统业务流程,…

作者头像 李华
网站建设 2026/3/29 10:18:29

LobeChat点击热力图分析建议

LobeChat点击热力图分析建议 在如今大语言模型&#xff08;LLM&#xff09;快速普及的背景下&#xff0c;用户与AI助手的交互早已不再是“提问-回答”这么简单。像 LobeChat 这样的开源聊天框架&#xff0c;凭借其灵活的多模型支持、插件系统和现代化UI设计&#xff0c;正成为越…

作者头像 李华
网站建设 2026/3/30 2:24:26

如何快速搭建个人天气数据服务:Open-Meteo开源API完整指南

如何快速搭建个人天气数据服务&#xff1a;Open-Meteo开源API完整指南 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/gh_mirrors/op/open-meteo 想要获取专业的天气预报信息却不想花费高昂费用&#xf…

作者头像 李华
网站建设 2026/4/1 1:13:41

TranslucentTB中文设置全攻略:让任务栏透明工具说中文

TranslucentTB中文设置全攻略&#xff1a;让任务栏透明工具说中文 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在为TranslucentTB的…

作者头像 李华
网站建设 2026/3/25 16:09:13

LobeChat市场竞品分析报告自动化

LobeChat市场竞品分析报告自动化 在AI应用从“技术演示”走向“产品落地”的今天&#xff0c;越来越多团队面临一个共性问题&#xff1a;如何让大语言模型真正被非技术人员高效使用&#xff1f;我们见过太多项目&#xff0c;后端模型能力强大&#xff0c;API调用精准&#xff0…

作者头像 李华