hibernate 数据处理
1.Hibernate的配置文件
Hibernate.cfg.xml ?
Dept.hbm.xml
?2.CRUD的方法名稱和參數(shù)類型
???Save(Object obj)
???Delete(Object obj)
???Update(Object obj)
???Get(Class clazz,Serializable ser)
???Load(Class clazz,Serializable ser)
?3.提取工具類
???HibernateUtil{
???????Factory
???????session
??????Public static Session getSession(){
?????????Cfg=new Configuration().configure();
?????????factory= cfg.buildSessionFactory();
?????????Session session=factory.openSession();
?????????Return session;
??????}
???}
4.@Before和@After
??注解
5.ORM (Object Relational Mapping)對象關(guān)系映射
??對象:Java中的業(yè)務(wù)視圖
??關(guān)系:底層二維表
??映射:小配置
?
6.主鍵生成策略
?Uuid: 32位的16進(jìn)制數(shù)
?
1) sequence
?
編號列生成由底層數(shù)據(jù)庫提供序列,來完成主鍵自增,要求數(shù)據(jù)庫必須支持序列 mysql不支持,oracle支持
?
create sequence myseq; 創(chuàng)建序列
?
insert into customer values (myseq.nextval); 插入數(shù)據(jù)時調(diào)用序列,序列+1
?
2) native
?
采用數(shù)據(jù)庫支持自增策略, mysql就用identity 、oracle就用sequence
?
策略1) ---> 策略4) 要求數(shù)據(jù)庫主鍵必須為數(shù)字 ,因?yàn)橹挥袛?shù)字才能自增
?
3) uuid
?
32位 唯一字符串, 主鍵使用varchar 類型
?
真實(shí)開發(fā)中,用程序提供uuid值
?
4) assigned
?
手動指定主鍵的值,該主鍵一般有實(shí)際意義,例如訂單單號(20160114-A002)
?
?
--------------------------------------------------
7.Get()和load()的區(qū)別
???Load()沒有使用對象的其他屬性的時候,沒有SQL ?延遲加載
???Get() :沒有使用對象的其他屬性的時候,也生成了SQL ?立即加載
? ? ??①:如果數(shù)據(jù)庫中,沒有 OID 指定的對象。通過 get方法加載,則返回的是一個null;通過load加載,則返回一個代理對象,
? ? ? ? ? ? ? 如果后面代碼如果調(diào)用對象的某個屬性會拋出異常:org.hibernate.ObjectNotFoundException;?
②:load 支持延遲加載,get 不支持延遲加載。
??是什么導(dǎo)致了延遲加載?
??解析:是因?yàn)閮?nèi)存中構(gòu)建了代理對象。
??stu.getClass()
?Handler:處理人
???延遲加載原因:代理對象
???一級緩存
???
8.臟檢查
臟檢查:當(dāng)事務(wù)提交時,Hiberante會對Session中持久狀態(tài)的對象進(jìn)行檢測,判斷對象的數(shù)據(jù)是否發(fā)生了改變
??依據(jù):
???為什么要進(jìn)行臟檢查?
???解析:如果對象發(fā)生了改變,就需要將改變更新到數(shù)據(jù)庫中,以確保內(nèi)存中的對象與數(shù)據(jù)庫中的數(shù)據(jù)保持一致。
如何臟檢查?
解析:當(dāng)一個Dept對象被加入到Session緩存(有人又稱為 一級緩存 ?后者是內(nèi)部緩存)中時,Session會為Dept對象的值類型的屬性復(fù)制一份快照。
? ? ? ? ? ? ? ?當(dāng)Session刷新緩存時,會先進(jìn)行臟檢查,即比較Dept對象的當(dāng)前屬性與它的快照,來判斷Dept對象的屬性是否發(fā)生了變化。
? ? ? 如果發(fā)生了變化,Session會根據(jù)臟對象的最新屬性值來執(zhí)行相關(guān)的SQL語句,將變化更新到數(shù)據(jù)庫中。
? ? ? ? ? ? ? ?Session具有一個緩存,可以管理和跟蹤所有持久化對象,對象和數(shù)據(jù)庫中的相關(guān)記錄對應(yīng)。
?
快照:
9.session(線程非安全) ?SessionFactory(線程安全)
PDF:
Session是線程非安全的
線程安全:多個線程訪問同一個資源的時候,
線程非安全:
?
10.Session:
??可以簡單理解成相當(dāng)于一個Connection
??Session是持久化對象的容器
??一級緩存(session)
如果兩次get()同一個OID,那么第二次不再SQL,說明了一級緩存的
存在性。一級緩存事務(wù)級別的事務(wù)
?Load()和get()都可以給緩存放入數(shù)據(jù),和取出數(shù)據(jù)
?
轉(zhuǎn)載于:https://www.cnblogs.com/yangronglin/p/5818250.html
總結(jié)
以上是生活随笔為你收集整理的hibernate 数据处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.3tf的varible\labele
- 下一篇: jQuery高度及位置操作