ORM
Object Relation Mapping
對象 關系 映射
對象 指實體域對象
關系 關系數據
模型
概念模型(實體-屬性)
關系數據模型(關系數據庫)
域模型(對象)
軟件分層
v - 表述層
c /
??? /業務層
m- 持久層(hibernate 技術實現)
??? \數據層
mvc 對應 各層次
概念實體關系
1對1
1對多
多對多
表與表之間的關系 參照完整性
外鍵
多對多
多對一
域對象之間的 關系
關聯 (一對一 一對多 多對多)
依賴 (一個類需要訪問另外一個類)
聚集 (一個類的對象是另一個類的一部分, 人和手)
一般化 (繼承關系)
域對象
?實體域對象? (實體EJB,POJO)
過程域對象? (會話EJB,消息驅動EJB,POJO)
事件域對象? ()
在hibernate中 一般只關注 實體域對象 和 過程域對象
域對象的關系
?域對象的關聯關系 是有方向的
體現在類的編碼不一樣的
單向關聯
雙向關聯
?
域對象的持久化
把對象從內存中 保存到持久化設備中去
ORM 與? ORM模式
ORM模式是一種持久化技術,還有其他模式的持久化技術。如主動域模式(BMP),JDO模式,CMP模式。
域模型和數據模型的各個不匹配之處
1,繼承
2,多對多
3,雙向
4。粒度
盡量少連接查詢,很消耗時間的操作
?
創建持久化類
1。持久化類符合javabean的規范,包含一些屬性 以及對應的getxxx 色天下學習方法
2。持久化類有一個id屬性,用來唯一表示類的每一個對象。 也叫OID 對象表示符
3。Hibernate要求持久化類必須提供一個不帶參數的默認構造方法
創建數據庫schema
創建對象-關系映射文件
(一般在eslispe中先創建數據庫 然后再創建持久化類以及映射文件)
hibernate 映射類型
hibernate的初始化
static{
try{
//根據默認位置的hibernate配置文件創建 configuration實例
Configuration config = new Configuration();
config.addClass(Customer.class);
//創建SessionFactory 實例
sessionFactory = config.buildSessinoFactroy();
}catch(Exception e){e.printStackTrace();}
}
SessionFactory 接口
一個SessionFactory 實例是對應一個數據源的,應用從SessionFactory 獲取session實例對象
1線程安全的
2重量級的,不能隨意創建和銷毀她的實例。
Session 接口
1 Session接口是hibernate應用最為廣泛的接口。
2 Session也被稱為持久化管理器,它提供和持久化相關的操作
3 Session有以下特點
?a 不是線程安全的 所以應避免多線程共用一個Session實例
?b Session實例是輕量級的,所謂輕量級是指他的創建和銷毀不需要消耗太多的資源。意味著程序中可以經常創建和銷毀Session實例,保證不多線程使用Session對象。
Session接口的常用方法:
save()
update()
delete()
load()
Session執行事務流程
Session session = factory.openSession();
Transaction tx;
try{
tx = session.beginTranscation();
//執行事務
...
//提交事務
tx.commit();
}
catche(Exception e)
{//如果出現異常,撤消事務
if(tx!=null)tx.rollback();
throw e;
}
finally{
session.close(); //不管事務是否成功,最后都要關閉session對象
}
}
?
?
?
?