核心開發介面介紹1、hibernate_0500_CoreAPI2、HiberanteAPI 文檔需要單獨下載 線上api鏈接:http://docs.jboss.org/hibernate/core/3.3/api3、Configuration a) AnnotationConfiguration ...
核心開發介面介紹
1、hibernate_0500_CoreAPI
2、HiberanteAPI 文檔需要單獨下載 線上api鏈接:http://docs.jboss.org/hibernate/core/3.3/api
3、Configuration
a) AnnotationConfiguration
b) 進行配置信息的管理
c) 用來產生 SessionFactory
d) 可以在 configure方法中指定hibernate配置文件
e) 只需關註一個方法即:buildSessionFactory()
4、SchemaExport
5、SessionFactory
a) 用來產生和管理Session
b) 通常情況下每個應用只需要一個 SessionFactory
c) 除非要訪問多個資料庫的情況
d) 關註兩個方法:openSession getCurrentSession
i.openSession 每次都是新的,需要close
ii.getCurrentSession從上下文找,有用舊的,沒有建新的
1、用途:界定事務邊界
2、事務提交自動close
3、current_session_context_class(jta/java transaction api thread)
a) thread 使用 connection
6、Session
a) 管理一個資料庫的任務單元
b) 方法(CRUD)
i. save
ii. delete
iii. load
iv. get
v. get與load的區別
1.不存在對應記錄是表現不一樣
2.load返回的是代理對象,等到真正用到對象的內容時才發出sql語句
3.get 直接從資料庫載入,不會延遲
vi.update
1.用來更新detached,更新完成後轉為persistent狀態
2.更新transient對象會報錯(資料庫有對應記錄)
3.更新自己設定id的transient對象可以
4.p狀態的欄位只要設定不同欄位就會發生更新
4.更新部分更改的欄位
a) xml 設定 property 標簽的update屬性,annotation 設定@Column的updatable屬性,不過這種方式很少用,不靈活,配置: @Column(updatable=false)
b) 使用xml中的dynamic-update,JPA 1.0 Annotation沒有對應的屬性。配置: <class name="Student" table="student" dynamic-update="true">
hibernate擴展?
i.同一個session可以,跨session不行,不過可以用merge()(不重要)
c) 使用HQL(EJBQL)(建議)的內容。示例: Query query = session.createQuery("update Student s set s.name='z5' where s.id = 1");
iv. saveOrUpdate
vii. find 方法已過時!
ix. clear 方法
1.無論是load還是get,都會首先查找緩存(一級緩存),如果沒有,才會去資料庫查找,調用clear()方法可以強制清除session緩存
ixi.flush 方法
1.可以強制進行從記憶體(session緩存)到資料庫的同步
2.flushMode
x.調用flush方法可以強制進行從記憶體到資料庫的同步!
7.SchemaExport
將表模式導出到資料庫的命令行工具。 這個類也可以從應用程式內部調用。
代碼: new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
create方法:
View Code
8.Query介面
a) 參考Hibernate查詢(HQL EJBQL)的內容
8.Note:
a)Hibernate 中設計很多非常非常細節的區別,但在實際應用中用的極少,請大家先享受寫項目的樂趣,再來探討這些細節問題
i.比如save和persist的區別
ii.merge,evict等方法
iii.比如refresh、lock等
b)建議的學習方法:動手實驗
c)細節問題參考補充視頻
三種狀態
1、上一個project
2、三種狀態的區分關鍵在於
a) 有沒有ID
b) ID 在資料庫中有沒有
c) 在記憶體中有沒有(session 緩存)
a) transient:記憶體中一個對象,沒ID,緩存也沒有
b) persistent:記憶體中有,緩存中有,資料庫有,有ID
c) detached:記憶體有,緩存沒有,資料庫有,有ID
3、對這三種狀態需要關註的問題是在改狀態下如果進行數據的操作會發生什麼結果,比如改變屬性的值會不會發出update語句?
a) 強烈建議動手實驗
b) 進行正常人的思考
c) 絕對不要去背這些東西!背過也並不代表你有多牛!
4、調用 flush 方法可以強制進行從記憶體到資料庫的同步!
jar包鏈接: https://pan.baidu.com/s/1bprKHav 密碼: 3fcx
鏈接: https://pan.baidu.com/s/1pKL8om3 密碼: k7wx