核心开发接口介绍
核心開發接口介紹
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
轉載于:https://www.cnblogs.com/ShawnYang/p/6721853.html
總結
- 上一篇: 最新手机号段归属地数据库(2017年4月
- 下一篇: mysql查询赋值、修改拼接字符串