SlideShare uma empresa Scribd logo
1 de 86
对象 / 关系映射— Hibernate ,[object Object],[object Object],作者:赵青
目  录 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
数据的持久化 持久化  持久层 持久化如何演变为持久层? 是不是只要在应用中用了数据库就天然具备了“持久层”了呢?未必!
只有持久化而没有持久层 ,[object Object]
 
没有持久层的特征 ,[object Object],[object Object],[object Object]
引入持久层后的系统架构
改良后的设计
引入 DAO 模式 ,[object Object],[object Object],[object Object]
引入 DAO 模式的优点 ,[object Object],[object Object]
改良后的代码
观察 DAO 的实现细节
问题的症状 - 用 JDBC 实现持久层 ,[object Object],[object Object],[object Object]
新需求的产生 - 通用的持久层框架 ,[object Object],[object Object],[object Object]
目  录 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hibernate 在应用中的位置 ,[object Object],开发如何分层? 业务逻辑层和持久化层绝不要依赖于展现层。 持久层对于业务层是透明的,持久层和业务层的变化是彼此独立的。
Hibernate 核心架构
Configuration ,[object Object],[object Object],[object Object],[object Object]
SessionFactory ,[object Object],[object Object],[object Object],[object Object]
Session ,[object Object],[object Object],[object Object],[object Object],[object Object]
Transaction  ( 事务 ) ,[object Object],[object Object],[object Object]
目  录 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
对象-关系数据库的基本映射 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],外键 1:n/n:1 表的列 类的属性(基本类型) 记录 对象 表 类 关系数据库 对象
一个简单例子 Department.hbm.xml
Hibernate 基本数据类型
实例前的准备—项目目录结构
insert ,[object Object]
Load ,[object Object]
update ,[object Object]
delete ,[object Object]
使用 Ant 构建开发过程 ,[object Object],[object Object],[object Object],[object Object]
进一步减少编码量 -XDoclet ,[object Object],[object Object],[object Object]
目  录 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hibernate 面临的挑战: 对象—关系模型的不匹配( Paradigm Mismatch ) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Identity—— 同一性问题 ,[object Object],[object Object],[object Object]
Database identity with Hibernate ,[object Object],[object Object],[object Object],[object Object]
主键的选择 ,[object Object],[object Object],[object Object]
identifier generator—— 主键生成策略 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
granularity—— 粒度问题 ,[object Object]
细粒度模型的设计 该设计体现了一个“合成 ”的关系( composition ):即整体和部分的关系。部分不可独立存在而依赖于整体。 sendMessage() 这种细粒度的设计更好的体现了类的内聚性,体现了对象设计的职责分配原则:将职责分配给拥有履行一个职责所必需信息的类 。
数据库设计的思考 这样的设计是不必要的,并且存在性能问题。
Entity and Component ,[object Object],[object Object],[object Object],[object Object]
映射文件的格式
Subtypes—— 子类型问题 对象模型存在“ is a” 和“ has a” 的关系,而关系模型仅仅存在“ has a” 的关系,这是对象模型和关系模型最明显的 mismatch ,如何将“ is a” 转化为数据库中的“ has a” 是 hibernate 需要解决的问题。
Table per concrete class 这是最简单的一种方式:每一个子类对应一张表,父类没有表。 这种方式会产生“ Polymorphic queries” 的问题。
Polymorphic queries— 多态查询 ,[object Object],[object Object],[object Object]
Table per class hierarchy 整个继承树对应一张表,子类用 type discriminator 字段来区分。这种方式在性能和简单性两方面都做的很好。 父类的变动很方便。
多态查询 ,[object Object],[object Object],[object Object]
映射文件的格式
Table per subclass 这种设计符合数据库的设计范式。 但是可能会有严重的性能问题。
多态查询的解决——父类 ,[object Object]
多态查询的解决——子类 ,[object Object],[object Object],[object Object]
映射文件格式
继承策略选择 ,[object Object],[object Object]
associations— 关联 ,[object Object],[object Object],[object Object]
many to one
one to many
双向关联产生的问题 ,[object Object],[object Object],[object Object]
主控方和被控方 ,[object Object],[object Object],[object Object]
cascading save ,[object Object],[object Object],[object Object]
cascading delete ,[object Object],[object Object],[object Object]
目  录 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
对象的持久生命周期 ,[object Object],[object Object],[object Object]
Transient objects ,[object Object],[object Object],[object Object]
Persistent objects ,[object Object],[object Object],[object Object]
与数据库的同步 ,[object Object],[object Object],[object Object]
Detached objects ,[object Object],[object Object],[object Object]
例子—— 1
例子—— 2
例子—— 3
对象的状态图
区分 transient and detached 对象 ,[object Object],[object Object],[object Object],[object Object]
The scope of object identity ,[object Object],[object Object],[object Object]
对象树 ,[object Object]
Persistence by reachability ,[object Object],[object Object],[object Object]
不可能的任务 ,[object Object],[object Object],[object Object],[object Object],[object Object]
解决之道— Cascade ,[object Object],[object Object],[object Object],[object Object],[object Object]
目  录 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
重新思考项目之间的关系
etong-common 的依赖关系
etong-common 的内部体系
持久包—通用的持久化类设计
优化设计后的代码 ,[object Object]
沉重的反思——事务脚本 粒度顺序是: service > dao > domain 业务逻辑尽量写在 domain 里,不要在 service 写任何业务逻辑,而仅仅在 service 里调用 dao 和 domain ,完成事务逻辑,供前台调用。
参考书籍 ,[object Object],[object Object],[object Object]

Mais conteúdo relacionado

Semelhante a hibernate

前端基础知识回顾
前端基础知识回顾前端基础知识回顾
前端基础知识回顾Wu tianhao
 
An introduce to n hibernate (part 1) pub
An introduce to n hibernate (part 1) pubAn introduce to n hibernate (part 1) pub
An introduce to n hibernate (part 1) pubjiangxu
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总yiditushe
 
Java相关基础知识
Java相关基础知识Java相关基础知识
Java相关基础知识yiditushe
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 modelsEkman Hsieh
 
Hibernate 映射配置文件详解
Hibernate 映射配置文件详解Hibernate 映射配置文件详解
Hibernate 映射配置文件详解wpscbbn405
 
Java程序员面试之葵花宝典
Java程序员面试之葵花宝典Java程序员面试之葵花宝典
Java程序员面试之葵花宝典yiditushe
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
深入理解Andorid重难点
深入理解Andorid重难点深入理解Andorid重难点
深入理解Andorid重难点Bin Shao
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Abap oo
Abap ooAbap oo
Abap oovernoo
 

Semelhante a hibernate (20)

前端基础知识回顾
前端基础知识回顾前端基础知识回顾
前端基础知识回顾
 
An introduce to n hibernate (part 1) pub
An introduce to n hibernate (part 1) pubAn introduce to n hibernate (part 1) pub
An introduce to n hibernate (part 1) pub
 
Metadata4shenzhen Final
Metadata4shenzhen FinalMetadata4shenzhen Final
Metadata4shenzhen Final
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
Java相关基础知识
Java相关基础知识Java相关基础知识
Java相关基础知识
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 models
 
Hibernate 映射配置文件详解
Hibernate 映射配置文件详解Hibernate 映射配置文件详解
Hibernate 映射配置文件详解
 
Java程序员面试之葵花宝典
Java程序员面试之葵花宝典Java程序员面试之葵花宝典
Java程序员面试之葵花宝典
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
深入理解Andorid重难点
深入理解Andorid重难点深入理解Andorid重难点
深入理解Andorid重难点
 
Js培训
Js培训Js培训
Js培训
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
资源整合与Web2.0
资源整合与Web2.0资源整合与Web2.0
资源整合与Web2.0
 
资源整合与Web2.0
资源整合与Web2.0资源整合与Web2.0
资源整合与Web2.0
 
Kevenjiaoda
KevenjiaodaKevenjiaoda
Kevenjiaoda
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Abap oo
Abap ooAbap oo
Abap oo
 

Último

20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLPJamie (Taka) Wang
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_patternJamie (Taka) Wang
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven designJamie (Taka) Wang
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 

Último (15)

20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
 
20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
20200323 - AI Intro
20200323 - AI Intro20200323 - AI Intro
20200323 - AI Intro
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven design
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 

hibernate