SlideShare a Scribd company logo
对象 / 关系映射— 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]

More Related Content

Similar to 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
 
Metadata4shenzhen Final
Metadata4shenzhen FinalMetadata4shenzhen Final
Metadata4shenzhen Final
Shanghai Library
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总yiditushe
 
Java相关基础知识
Java相关基础知识Java相关基础知识
Java相关基础知识yiditushe
 
Chapter 4 models
Chapter 4 modelsChapter 4 models
Chapter 4 models
Ekman 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
 
资源整合与Web2.0
资源整合与Web2.0资源整合与Web2.0
资源整合与Web2.0
Shanghai Library
 
资源整合与Web2.0
资源整合与Web2.0资源整合与Web2.0
资源整合与Web2.0
Shanghai Library
 
Kevenjiaoda
KevenjiaodaKevenjiaoda
Kevenjiaoda
guest0c88ee
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Abap oo
Abap ooAbap oo
Abap oo
vernoo
 

Similar to 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
 

hibernate