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