1.域?qū)ο笾g的關(guān)系:
關(guān)聯(lián)(一對(duì)多,多對(duì)多),依賴(用到其它對(duì)象的方法或?qū)傩裕奂ㄕw和部分),一般化(繼承)
2.域?qū)ο笈c數(shù)據(jù)庫(kù)之間的關(guān)系

但是,表之間只能通過(guò)外鍵來(lái)表示關(guān)聯(lián)關(guān)系。其它關(guān)系都是借助hibernate的配置來(lái)實(shí)現(xiàn)的。
3.sql語(yǔ)句的實(shí)現(xiàn):
hibernate會(huì)在初始化階段預(yù)定義一些insert,update,delete語(yǔ)句,保存在sessionFactory緩存中。
在hibernate初始化初期,就會(huì)根據(jù)映射文件配置信息,為持久化對(duì)象預(yù)定義sql語(yǔ)句,并保存在sessionFactory緩存中(HQL則是在程序運(yùn)行是動(dòng)態(tài)生成):
insert,update,delete,select,默認(rèn)情況包括對(duì)象的所有字段,可以設(shè)置為不包括(適用insert/update)。
<proprety name="XXX " insert="false" column="XXX">
property的formula指定一個(gè)SQL表達(dá)式(引用表字段,調(diào)用SQL函數(shù),子查詢) ,當(dāng)表中不從在某屬性在表中不存在映射字段時(shí)用formula.
<property name="totlaprice" formula="(select sum(price) form table)"> //子查詢
4.hibernate API 接口分類:
訪問(wèn)數(shù)據(jù)庫(kù)操作(insert,delete,update,query),有session,traction,quert..
配置接口Configuration.
回調(diào)接口(應(yīng)用程序接受hibernate內(nèi)部事件并作出相應(yīng)回應(yīng))Inteceptor..,
擴(kuò)展接口
同時(shí),hibernate內(nèi)部分裝了jndi&&jta,可以使hibernate和j2ee服務(wù)器集成。

Configuration:配置并啟動(dòng)根hibernate,創(chuàng)建sessionFactory對(duì)象。
sessionFactory:對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源。應(yīng)用從sessionFactory中獲得session.
sessionFactory緩存分兩種:內(nèi)置(hibernate配置信息,映射元數(shù)據(jù)信息),外置是一個(gè)可配置的緩存插件,存放大量的數(shù)據(jù)庫(kù)數(shù)據(jù)拷貝,介 質(zhì)可以是內(nèi)存或硬盤(pán)
5. session:
session是輕量級(jí)的,通常將一個(gè)session實(shí)例和一個(gè)數(shù)據(jù)庫(kù)事務(wù)綁定。session實(shí)現(xiàn)類中定義了java集合,構(gòu)成了session緩存
Session session=sessionFactory.openSession();
Traction tx=null;
try{
tx=session.beingTraction();
//開(kāi)始一個(gè)事務(wù)
..
//提交一個(gè)事務(wù)
tx.commit();
}catch(Exception e){
if(tx!=null)
tx.rollback()

}finally{
session.close()
}
session緩存(減少數(shù)據(jù)庫(kù)訪問(wèn)頻率,保持緩存對(duì)象與數(shù)據(jù)庫(kù)同步):

session.close()清理緩存。
session的setFlushModel()設(shè)定清理緩存的時(shí)間。

6.hibernate訪問(wèn)持久化對(duì)象

應(yīng)用程序:
調(diào)用getXXX()把信息輸出到用戶端,調(diào)用setXXX把用戶的輸入信息寫(xiě)道Coustom對(duì)象中
Hibernate:
調(diào)用 Coustom的getXXX(),把得到的信息保存到數(shù)據(jù)庫(kù),調(diào)用Coustom的setXXX(),把數(shù)據(jù)庫(kù)信息寫(xiě)道Coustom對(duì)象中.
一般我們不會(huì)在持久化對(duì)象中加入業(yè)務(wù)邏輯代碼,列外總是有的。hibernate可以訪問(wèn)任何方法(包括private,應(yīng)用程序做不到)。
public void setXXX( Object o){
this.o=o;
//插入業(yè)務(wù)邏輯代碼
caculate();
//結(jié)束
}
7.持久化對(duì)象配置:
應(yīng)用程序按內(nèi)存地址區(qū)分對(duì)象,hibernate按對(duì)象標(biāo)志符區(qū)分對(duì)象(<id元素表示對(duì)象標(biāo)志符>),對(duì)象標(biāo)志符3不變(不為空,不修改,不重復(fù))。
映射單個(gè)自然主鍵:
<id name="name" column="name" type="string">
<generator class="assigned"/>//assigned表示由應(yīng)用程序賦值
</id>

<version name="version" column="version" unsaved-value="0"/> //name不可能為空,所以只能通過(guò)version版本控制來(lái)表示臨時(shí)和游離對(duì)象
8.關(guān)聯(lián)映射
關(guān)系數(shù)據(jù)庫(kù)只存在外鍵參照關(guān)系(總是"many"參照"one"),即只支持一對(duì)多/多對(duì)一。

public class Coustom{
private int ID;
private String name;
private Set orders=new HashSet(); //一對(duì)多關(guān)系中
//access method

}
public class Orders{
private int ID;
private Coustom coustom; //多對(duì)一中,只有'many'方需要引用one'方,'one'方則不需要知道'many'方
//access method

}
Orders中映射配置代碼(多對(duì)一):
<many-to-one name="coustom" column="coustom_id" class="Coustom"
cascade="save-update" //級(jí)聯(lián)保存更新
not-null="true">
Coustom中映射配置代碼(一對(duì)多):
<set name="orders" cascade="save-update">
<key column="coustom_id"/>
<one-to-many class="Orders">
</set>
public class coustom{
private Long id;
private Address homeaddress;

}

public class Address{
//Address沒(méi)有OID,因?yàn)椴恍枰ㄟ^(guò)session保存,更新。
private String city;
private String street;
private String zipcode;
private String province;
private Coustom coustom; //所屬的整體類

}
<component name="homeaddress" class="Address">
<parent name="coustom" /> //指定Address所屬的整體類
<property name="street" column="home_street"/>
<property name="city" column="home_city"/>
<property name="province" column="home_province"/>
<property name="zipcode" column="home_zipcode"/>
</component>

11.hibernate檢索策略(延遲檢索、立即檢索、左外連接檢索)
關(guān)聯(lián)(一對(duì)多,多對(duì)多),依賴(用到其它對(duì)象的方法或?qū)傩裕奂ㄕw和部分),一般化(繼承)
2.域?qū)ο笈c數(shù)據(jù)庫(kù)之間的關(guān)系

但是,表之間只能通過(guò)外鍵來(lái)表示關(guān)聯(lián)關(guān)系。其它關(guān)系都是借助hibernate的配置來(lái)實(shí)現(xiàn)的。
3.sql語(yǔ)句的實(shí)現(xiàn):
hibernate會(huì)在初始化階段預(yù)定義一些insert,update,delete語(yǔ)句,保存在sessionFactory緩存中。
在hibernate初始化初期,就會(huì)根據(jù)映射文件配置信息,為持久化對(duì)象預(yù)定義sql語(yǔ)句,并保存在sessionFactory緩存中(HQL則是在程序運(yùn)行是動(dòng)態(tài)生成):
insert,update,delete,select,默認(rèn)情況包括對(duì)象的所有字段,可以設(shè)置為不包括(適用insert/update)。

property的formula指定一個(gè)SQL表達(dá)式(引用表字段,調(diào)用SQL函數(shù),子查詢) ,當(dāng)表中不從在某屬性在表中不存在映射字段時(shí)用formula.

4.hibernate API 接口分類:
訪問(wèn)數(shù)據(jù)庫(kù)操作(insert,delete,update,query),有session,traction,quert..
配置接口Configuration.
回調(diào)接口(應(yīng)用程序接受hibernate內(nèi)部事件并作出相應(yīng)回應(yīng))Inteceptor..,
擴(kuò)展接口
同時(shí),hibernate內(nèi)部分裝了jndi&&jta,可以使hibernate和j2ee服務(wù)器集成。

Configuration:配置并啟動(dòng)根hibernate,創(chuàng)建sessionFactory對(duì)象。
sessionFactory:對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源。應(yīng)用從sessionFactory中獲得session.
sessionFactory緩存分兩種:內(nèi)置(hibernate配置信息,映射元數(shù)據(jù)信息),外置是一個(gè)可配置的緩存插件,存放大量的數(shù)據(jù)庫(kù)數(shù)據(jù)拷貝,介 質(zhì)可以是內(nèi)存或硬盤(pán)
5. session:
session是輕量級(jí)的,通常將一個(gè)session實(shí)例和一個(gè)數(shù)據(jù)庫(kù)事務(wù)綁定。session實(shí)現(xiàn)類中定義了java集合,構(gòu)成了session緩存
















session緩存(減少數(shù)據(jù)庫(kù)訪問(wèn)頻率,保持緩存對(duì)象與數(shù)據(jù)庫(kù)同步):

session.close()清理緩存。
session的setFlushModel()設(shè)定清理緩存的時(shí)間。

6.hibernate訪問(wèn)持久化對(duì)象

應(yīng)用程序:
調(diào)用getXXX()把信息輸出到用戶端,調(diào)用setXXX把用戶的輸入信息寫(xiě)道Coustom對(duì)象中
Hibernate:
調(diào)用 Coustom的getXXX(),把得到的信息保存到數(shù)據(jù)庫(kù),調(diào)用Coustom的setXXX(),把數(shù)據(jù)庫(kù)信息寫(xiě)道Coustom對(duì)象中.
一般我們不會(huì)在持久化對(duì)象中加入業(yè)務(wù)邏輯代碼,列外總是有的。hibernate可以訪問(wèn)任何方法(包括private,應(yīng)用程序做不到)。






7.持久化對(duì)象配置:
應(yīng)用程序按內(nèi)存地址區(qū)分對(duì)象,hibernate按對(duì)象標(biāo)志符區(qū)分對(duì)象(<id元素表示對(duì)象標(biāo)志符>),對(duì)象標(biāo)志符3不變(不為空,不修改,不重復(fù))。
映射單個(gè)自然主鍵:





8.關(guān)聯(lián)映射
關(guān)系數(shù)據(jù)庫(kù)只存在外鍵參照關(guān)系(總是"many"參照"one"),即只支持一對(duì)多/多對(duì)一。




private Set orders=new HashSet(); //一對(duì)多關(guān)系中











Orders中映射配置代碼(多對(duì)一):

cascade="save-update" //級(jí)聯(lián)保存更新
not-null="true">
Coustom中映射配置代碼(一對(duì)多):




9: 對(duì)象的狀態(tài)轉(zhuǎn)換
臨時(shí)態(tài):不在session緩存中,不在數(shù)據(jù)庫(kù)中
持久態(tài):總是被一個(gè)session實(shí)例(位于session緩存中),session在清理緩存時(shí),會(huì)根據(jù)持久化對(duì)象屬性變化,同步數(shù)據(jù)庫(kù)
游離態(tài):不再session緩存中,保存在數(shù)據(jù)庫(kù)中
session的Load&Get:
Load返回游離對(duì)象本身,在加載不存在OID對(duì)象時(shí)報(bào)錯(cuò)。
Get返回游離對(duì)象的副本拷貝,會(huì)立刻訪問(wèn)數(shù)據(jù)庫(kù),在加載不存在OID對(duì)象時(shí)返回null.
10:聚集映射(組件可嵌套配置)
對(duì)應(yīng)用程序按照精粒度設(shè)計(jì)原則,盡量提高代碼重用性。對(duì)關(guān)系數(shù)據(jù)庫(kù)盡可能減少表的數(shù)量,這樣一個(gè)表可以對(duì)應(yīng)多個(gè)類。

private Long id;









private String province;
private Coustom coustom; //所屬的整體類


配置代碼:









11.hibernate檢索策略(延遲檢索、立即檢索、左外連接檢索)