//////////2016-12-14 ~ 2016-12-15///////////
int study_data(){
配置實(shí)體映射:
1.xml:
配置文件名字:類名.hbm.xml
<hibernate-mapping>
? ? <class name="className" table="tableName">
? ? ? ? <id name="類屬性名" column="主鍵名" />
? ? ? ? <property name="屬性名" column="字段名" />
? ? ? ? ...
? ? </class>
</hibernate-mapping>
2.annotation:
@Entity ? ?//注解Entity表示該類納入Hibernate管理旭绒,能夠被持久化养筒,加在實(shí)體類前面
@Table(name="tableName") ? ?//指定該實(shí)體類對應(yīng)的數(shù)據(jù)庫表名撇吞,加在實(shí)體類前面
@Id ? ?//指定該列為主鍵曹锨。
@Column(name="變量名") ? ?//指定變量對應(yīng)的數(shù)據(jù)庫表的列為"變量名"
hibernate主鍵策略
assigned - 主鍵由外部程序負(fù)責(zé)生成
increment - 由hibernate從數(shù)據(jù)庫中取出主鍵的最大值获枝,每次增量為1,在內(nèi)存中生成主鍵
hilo - 高地位方式荐糜,最常用的一種生成方式疙咸。需要一張額外的表保存hi的值
seqhilo - 將hilo中的數(shù)據(jù)表換成了序列sequence,適用于支持sequence的數(shù)據(jù)庫(mysql中不支持sequence)
sequence - 采用數(shù)據(jù)庫提供的sequence機(jī)制生成主鍵媳友,需要數(shù)據(jù)庫支持sequence
identity - 由數(shù)據(jù)庫自己生成斯议,但這個(gè)主鍵必須設(shè)置為自增長
native - 由hibernate根據(jù)使用的數(shù)據(jù)庫自行判斷采用identity,hilo醇锚,sequence其中一種作為主鍵生成方式
uuid - 指在一臺(tái)機(jī)器上生成的數(shù)字
guid - 全球唯一標(biāo)識(shí)符
foreign - 使用另外一個(gè)相關(guān)聯(lián)的對象的主鍵作為該對象的主鍵哼御。主要用于一對一關(guān)系中
select - 使用觸發(fā)器生成主鍵坯临,很少用
Hibernate實(shí)體查詢
session.get(class,id):
1.session緩存中查找是否存在id對應(yīng)的Object
2.二級(jí)緩存中查找是否存在id對應(yīng)的Object
3.數(shù)據(jù)庫查找,若不存在則返回null
session.load(class,id):
lazy load模式:
1.session緩存查找是否存在id對應(yīng)的Object
2.不存在則返回實(shí)體相應(yīng)的代理對象(沒有實(shí)體數(shù)據(jù))
3.當(dāng)使用該代理對象時(shí)恋昼,再查詢二級(jí)緩存和數(shù)據(jù)庫(沒找到時(shí)報(bào)錯(cuò)看靠,而不是返回null)
非lazy load模式:和get方法一致。
session.find(class,id):
與get方法相似液肌,已不建議使用
HQL查詢
HQL(Hibernate Query Language)的語法和SQL很相似挟炬,但是HQL是一種面向?qū)ο蟮牟樵冋Z句,它的操作對象是類嗦哆、實(shí)例谤祖、屬性等,而SQL的操作對象是數(shù)據(jù)表老速、列等數(shù)據(jù)庫對象粥喜。
HQL查詢依賴于Query類,每一個(gè)Query實(shí)例對應(yīng)一個(gè)查詢對象橘券,它的執(zhí)行是通過Session的createQuery()方法來獲得的额湘。
Query:
session.creatQuery(HQL)
session.creatQuery(HQL,Class)
session.creatNativeQuery(SQL)
session.creatNativeQuery(SQL,Class)
執(zhí)行HQL查詢的步驟:
1、獲得Hibernate?Session對象
2旁舰、編寫HQL語句
3锋华、調(diào)用Session的createQuery方法創(chuàng)建查詢對象
4、如果HQL語句包含參數(shù)箭窜,則調(diào)用Query的setXxx方法為參數(shù)賦值
5毯焕、調(diào)用Query對象的list等方法返回查詢結(jié)果。
特點(diǎn):
關(guān)鍵字不區(qū)分大小寫
持久類名稱及屬性區(qū)分大小寫
支持占位符(:name)
from子句绽快,select子句
Hibernate實(shí)體操作:
實(shí)體狀態(tài):
1.瞬時(shí)/臨時(shí)狀態(tài)(transient):對象不存在數(shù)據(jù)庫以及session緩存當(dāng)中
2.持久化狀態(tài)(persistent):對象存在于數(shù)據(jù)庫以及session緩存當(dāng)中
3.離線/游離狀態(tài)(detached):對象存在與數(shù)據(jù)庫但不存在與session緩存當(dāng)中芥丧,即未被session托管
狀態(tài)轉(zhuǎn)化:
new一個(gè)實(shí)體時(shí)變?yōu)榕R時(shí)狀態(tài)
臨時(shí)狀態(tài)->持久化狀態(tài):save(obeject)紧阔,saveOrUpdate(object)
持久化狀態(tài)->臨時(shí)狀態(tài):delete(object)
持久化狀態(tài)->游離狀態(tài):avict(object)坊罢,close(object),clear(object)
游離狀態(tài)->持久化狀態(tài):update(object)擅耽,saveOrUpdate(object),lock(object)
游離狀態(tài)->臨時(shí)狀態(tài):delete(object)
Hibernate事務(wù)管理:
Transaction tx = session.beginTransaction()等同于connection.setAutoCommit(false)
tx.commit()等同于connection.commit()
tx.rollback()等同于connection.rollback()
}