学习 ORM(JPA/Hibernate)的“收益”
你学了整套 ORM 体系换来了什么ORM 的宣传口径是你只需要操作 Java 对象框架自动帮你生成 SQL、管理关系、处理缓存。你不需要写 SQL不需要关心数据库细节。这套说辞听起来很美但代价是什么下面这张表列出了你为了“不用写 SQL”而需要学习的全部内容。一、为了“把对象映射成表”你学到的收益ORM 概念它的作用Entity告诉框架这个类是实体Table指定对应的数据库表名Column指定字段映射列名、长度、是否可空Id标记主键字段GeneratedValue指定主键生成策略AUTO、IDENTITY、SEQUENCE、TABLETransient标记非持久化字段Enumerated枚举类型映射ORDINAL / STRINGTemporal日期类型映射DATE / TIME / TIMESTAMPLob大字段映射BLOB / CLOBVersion乐观锁版本号字段Embeddable/Embedded嵌入对象映射EmbeddedId复合主键MappedSuperclass父类字段继承二、为了“关联其他表”你学到的收益ORM 概念它的作用OneToOne一对一关联OneToMany一对多关联ManyToOne多对一关联ManyToMany多对多关联JoinColumn指定外键列名JoinTable多对多中间表配置OrderBy关联集合的排序方式mappedBy双向关联的对方字段fetch LAZY / EAGER关联加载时机cascade ALL / PERSIST / MERGE / REMOVE / REFRESH / DETACH级联操作类型orphanRemoval true / false孤儿对象删除策略三、为了“操作数据”你学到的收益ORM 概念它的作用EntityManagerJPA 核心操作接口EntityManagerFactoryEntityManager 工厂EntityTransaction事务管理persist()保存实体merge()合并实体更新remove()删除实体find()按主键查询getReference()懒加载引用查询flush()立即同步到数据库detach()从持久上下文分离clear()清空持久上下文contains()判断是否托管四、为了“查询数据”你学到的收益HQL / JPQL一门全新的查询语言概念它的作用SELECT ... FROM查询实体注意FROM 后面是实体名不是表名JOIN FETCH关联预加载为了解决 N1WHERE 对象属性路径条件查询用u.name而不是u.name的 SQL 字段名GROUP BY/HAVING分组聚合ORDER BY排序NEW构造器表达式直接构造 VO 对象子查询支持但不完整聚合函数支持 COUNT、SUM、AVG、MAX、MIN但有限制窗口函数不支持递归 CTE不支持UNION不支持数据库特有函数DATE_FORMAT、EXTRACT、JSON_EXTRACT等不支持或需注册方言Criteria API一套更“类型安全”的查询构造器概念它的作用CriteriaBuilder查询构建器入口CriteriaQueryT定义查询返回类型RootT查询根节点JoinZ, X关联查询Predicate条件组合AND / OR / NOTPath属性路径访问Order排序条件Expression表达式算术运算、函数调用Subquery子查询构造Metamodel静态元模型需要代码生成器你学完这套 Criteria API写出来的代码长这样CriteriaBuildercbentityManager.getCriteriaBuilder();CriteriaQueryUserquerycb.createQuery(User.class);RootUseruserquery.from(User.class);JoinUser,Orderorderuser.join(orders);Predicatepredicatecb.and(cb.equal(user.get(name),张三),cb.greaterThan(order.get(amount),100));query.select(user).where(predicate).orderBy(cb.desc(user.get(createTime)));ListUserresultentityManager.createQuery(query).getResultList();五、为了“理解框架行为”你学到的收益ORM 概念它的作用一级缓存Persistence Context同一个 EntityManager 内的对象缓存自动管理二级缓存跨 EntityManager 的缓存需额外配置查询缓存查询结果缓存需配合二级缓存使用脏检查机制框架自动检测托管对象的变化并生成 UPDATE延迟加载访问关联对象时才触发查询否则是代理对象关联加载策略LAZY vs EAGER选错了就是 N1会话管理什么时候打开 EntityManager什么时候关闭托管状态 / 游离状态 / 分离状态 / 删除状态四种状态的区分以及状态转换规则乐观锁实现机制Version注解 版本号检查事务传播行为需要配合 Spring 事务管理Transactional的各种属性方言Dialect不同数据库的 SQL 方言差异需要选择正确的方言类六、为了“处理复杂场景”你学到的收益ORM 概念它的作用NamedQuery预定义 JPQL 查询启动时解析NamedNativeQuery预定义原生 SQL 查询SqlResultSetMapping原生 SQL 结果映射到实体ConstructorResult原生 SQL 结果映射到 VOEntityGraph动态控制关联加载图NamedEntityGraph预定义关联加载图QuerySpring Data JPA在 Repository 接口上写 JPQL 或原生 SQLModifying标记 UPDATE / DELETE 操作Transactional事务边界控制其实跟 JPA 无关是 Spring 的能力PersistenceUnitUtil工具类判断实体状态EntityManager.createNativeQuery()你终于退回了原生 SQL这些“收益”的最终结果是什么你学完了20 个注解10 个关联关系配置一套完整的查询语言JPQL/HQL一套复杂的 Criteria APIN1 问题的识别与解决方案四种实体状态及转换规则一级缓存 / 二级缓存 / 查询缓存的区别与用法方言配置你以为换来了“不用写 SQL”。但事实是复杂联表查询你写不出 JPQL → 退回到createNativeQuery()窗口函数、递归 CTE、UNION → JPA 不支持 → 退回到createNativeQuery()报表统计 3 张表 JOIN → JPQL 写起来比 SQL 还难懂 → 退回到createNativeQuery()需要调优 SQL 时框架生成的那坨 SQL 你自己都看不懂 → 退回到createNativeQuery()你学了一大套 ORM 体系最终在复杂场景下它只是你退回原生 SQL 路上的一个减速带。破MyBatis 至少还让你写 SQLJPA 连让你写 SQL 都要绕一圈MyBatis 的缺点是 XML 太啰嗦但它至少让你直接写 SQL。你的 SQL 能力是完整的。JPA 的问题是你学了一套框架但它主动阉割了你的 SQL 能力。你本来能写 SQL但框架告诉你“用 JPQL”你用了之后发现 JPQL 只有 SQL 1/3 的能力。剩下 2/3 的能力你只能退回原生 SQL——但这时你发现你学的那套 JPQL 语法在复杂场景下毫无用处。你学了一套专有语法结果它在你最需要的时候用不上。那学它的“收益”在哪立SimpleDAOSimpleDAO 不做对象关系映射不管理对象状态不制造缓存不生成 SQL。你要查数据写 SQL调用list()你要联表写 SQL调用page()你要复杂报表写 SQL调用list()你要调优复制 SQL 到数据库直接跑你不需要学 JPQL、Criteria API、EntityManager、缓存策略、懒加载配置、四种状态转换、N1 解决方案、方言配置、EntityGraph、二级缓存配置……你只需要会 SQL就会用 SimpleDAO。因为它的核心能力只有一条执行你写的 SQL把结果映射成 Java 对象。就这么简单。没有任何隐藏的“收益”也没有任何隐藏的成本。开源地址核心框架https://gitee.com/gao_zhenzhong/simple-dao系统底座https://gitee.com/gao_zhenzhong/simple-dao-starter代码生成器https://gitee.com/gao_zhenzhong/simple-dao-coder实战案例https://gitee.com/gao_zhenzhong/simple-dao-demo写在最后MyBatis 让你学了几十个标签、上百个属性、十几个注解、31 个异常最终换来的是“在 XML 里拼一个字符串”。JPA 让你学了 20 个注解、10 个关联关系、一套 JPQL 语法、一套 Criteria API、四种状态转换、三种缓存策略、一套方言体系……最终换来的是“写了复杂查询时还得退回到原生 SQL”。但是我们也要承认一个事实单表对象化确实是一个真实的收益。在单表 CRUD 的场景下JPA 和 Hibernate 确实能帮你省掉写 INSERT、UPDATE、DELETE 和按主键 SELECT 的 SQL。你不用写 INSERT INTO user (name, age) VALUES (?, ?)直接 user.setName(“张三”) 然后 entityManager.persist(user) 就行。这个收益是真实的不是带引号的。问题是单表 CRUD 只是企业持久层开发的一小部分——远不到 10%。剩下的 90%多表联查、子查询、聚合报表、批量更新、跨表条件筛选……才是你真正要面对的业务场景。而这些场景下JPA 帮不了你你只能退回到原生 SQL。所以单表对象化是一个真实的收益但它覆盖的只是业务中很小的一部分。用一个覆盖 10% 场景的收益换取 90% 场景下的复杂度和限制这笔账怎么算你自己权衡。两个方向殊途同归。SimpleDAO 让你什么都不用多学你只需要会 SQL就会用它。它把“你不用学什么”当作核心收益。哪一个收益是真的你自己算账。

相关新闻

TDengine 时序数据库实战笔记(20260622)

TDengine 时序数据库实战笔记(20260622)

文章目录1. 为什么需要时序数据库?(与传统数据库对比)2. 典型应用场景3. 为什么选 TDengine?4. 核心概念速览5. 逻辑表与物理表:MySQL vs TDengine5.1 MySQL:逻辑表与物理表5.2 TDengine:逻辑表…

2026/6/23 12:44:15阅读更多 →
超越参数迷思:AI时代的“数字镜像”与人类思想建设

超越参数迷思:AI时代的“数字镜像”与人类思想建设

随着生成式人工智能深度融入大众生活,大模型在交互中展现出的“迎合性”或“偏见”引发了广泛讨论。当前,业界普遍倾向于通过不断调整模型参数、优化对齐算法来试图打造一个绝对中立、完美的AI。然而,从技术本质与社会学的双重维度审视&#…

2026/6/23 12:44:15阅读更多 →
AI 公司巨亏,你却用得越来越便宜

AI 公司巨亏,你却用得越来越便宜

你大概也注意到一个挺拧巴的事。 一边,新闻天天说 AI 公司在疯狂烧钱、巨额亏损——做 ChatGPT 的 OpenAI,据估算一年要亏一百多亿美元;马斯克的 xAI 更夸张,传出来的数字是每赚一块钱、要倒贴大概二十六块。整个行业今年在 AI 基…

2026/6/23 12:44:15阅读更多 →
事件驱动化技术事件溯源与命令查询职责分离模式

事件驱动化技术事件溯源与命令查询职责分离模式

事件驱动架构下的技术革新:事件溯源与CQRS模式解析 在当今高并发、高可用的分布式系统设计中,事件驱动架构(EDA)因其松耦合和异步特性成为技术热点。其中,事件溯源(Event Sourcing)与命令查询职…

2026/6/23 13:59:35阅读更多 →
【免费领源码】基于PHP框架的文旅资源展示与智能推荐平台|库存管理/订单发货/车辆管理完整项目

【免费领源码】基于PHP框架的文旅资源展示与智能推荐平台|库存管理/订单发货/车辆管理完整项目

基于PHP框架的文旅资源展示与智能推荐平台毕业设计项目整理文档一、项目概述本文整理的项目为“基于PHP框架的文旅资源展示与智能推荐平台”。系统围绕文旅资源展示、旅游景点购票、酒店订房、餐饮美食浏览、文化活动展示以及个性化推荐等业务展开,面向普通用户和管…

2026/6/23 13:59:35阅读更多 →
8大主流网盘直链一键获取:告别限速困扰的终极解决方案

8大主流网盘直链一键获取:告别限速困扰的终极解决方案

8大主流网盘直链一键获取:告别限速困扰的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

2026/6/23 13:59:35阅读更多 →
Gemini 3.5 图表 + 文字混合文档信息融合技术解析:原生多模态架构、统一 Token 序列化与工程实践

Gemini 3.5 图表 + 文字混合文档信息融合技术解析:原生多模态架构、统一 Token 序列化与工程实践

技术概要2026 年主流大模型都说自己支持多模态,但"能看图"和"能看好图"是两回事。GPT-5.5 的多模态是后天嫁接的——先有一个强大的文本模型,再把视觉编码器接上去;Gemini 3.5 是天生原生的——从训练第一天起&#xff0…

2026/6/23 13:59:35阅读更多 →
深度学习中的神经网络设计与优化

深度学习中的神经网络设计与优化

深度学习中的神经网络设计与优化是当前人工智能领域最核心的研究方向之一。随着算力的提升和大数据的普及,神经网络在图像识别、自然语言处理等领域展现出强大能力。如何设计高效、稳定的网络结构,并优化其训练过程,仍是研究者面临的重大挑战…

2026/6/23 13:59:35阅读更多 →
mba论文国内外研究现状怎么查

mba论文国内外研究现状怎么查

mba论文国内外研究现状怎么查 深夜,电脑屏幕的光映着你疲惫的脸。导师那句“文献综述太单薄,国内外研究现状梳理不清”的评语,像根刺一样扎在心上。你明明搜了知网、万方,甚至翻墙看了谷歌学术,可面对海量文献&#x…

2026/6/23 13:54:34阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →