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