jsp Hibernate 函數簡介

來源:互聯網
上載者:User

1、Configuration/SessionFactory/Session
Configuration執行個體代表了一個應用程式中Java類型 到SQL資料庫映射的完整集合. Configuration被用來構建一個(不可變的 (immutable))SessionFactory.
SessionFactory是安全執行緒的,建立代價很高。
Session是非安全執行緒的,輕量級的。一個Session對應一個JDBC串連,
Session的connection()會擷取Session與之對應的資料庫連接Connection對象。
Session的功能就是操作對象的,這些對象和資料庫表有映射關係。
Session操作的對象是有狀態的,分三類:
自由狀態(transient): 未持久化,未與任何Session相關聯,資料庫表中沒有對應的記錄。
持久化狀態(persistent): 與一個Session相關聯,對應資料庫表中一條記錄。
游離狀態(detached): 已經進行過持久化,但當前未與任何Session相關聯,資料庫表中曾經有一條記錄,現在還有沒有就不知道了。
游離狀態的執行個體可以通過調用save()、persist()或者saveOrUpdate()方法進行持久化。持久化執行個體可以通過調用 delete()變成游離狀態。通過get()或load()方法得到的執行個體都是持久化狀態的。游離狀態的執行個體可以通過調用 update()、0saveOrUpdate()、lock()或者replicate()進行持久化。游離或者自由狀態下的執行個體可以通過調用merge()方法成為一個新的持久化執行個體。
2、Session的save()/persist()/update()/saveOrUpdate()/merge()/delete()方法
save()方法將指定對象儲存,插入表中一條資料;
persist()方法將指定對象儲存,插入表中一條資料,我還沒發現它和save方法有什麼特別之處。
replicate()方法完全使用給定對象各個屬性的值(包括標識id)來持久化給定的游離狀態(Transient)的實體,很暴力啊,其中還需要指定儲存模式(有四種儲存策略供選擇)。
update()方法將指定對象更新,更新表中一條資料;
saveOrUpdate()方法接收一個實體物件,根據實體物件的id判斷是否已經存在進行儲存或更新操作,這樣儲存和更新方法就統一了;
merge()方法將給定的對象的狀態複製到具有相同標識的持久化對象上。
delete()方法將指定對象刪除,刪除表中一條資料;
特別注意:為了使用saveOrUpdate()方法,在由定義對應檔時,通過設定<id>標籤的unsaved-value="null"來判斷執行什麼操作: 當id屬性等於unsaved-value的值(在此為null)時,則認為還沒有儲存,應該執行儲存操作,否則執行更新操作。這樣設定之後,可以使用saveOrUpdate()方法來統一儲存和更新的方法。
<id name="id" column="id" type="java.lang.Integer" unsaved-value="null">
<generator class="native"/>
</id>
unsaved-value可以設定的值有四個:
any:總是儲存
none:總是更新
null:id為null時儲存(預設)
valid:id為null或是指定值時儲存
3、Session的get()/load()方法
get()方法會總是查詢實體物件,不存在時候返回null;
load()方法也是擷取一個實體物件,不存在時候拋null 指標異常。
4、Session的clear()/evict()方法
clear()方法清除Session層級緩衝中的所有實體(包括各種狀態)對象,目的是釋放記憶體。
evict()方法清除Session層級緩衝中的指定的實體(包括各種狀態)對象。
當然,Session關閉後,這些緩衝也就不存在了,會等待JVM回收。
5、Session的flush()方法
flush()強制持久化Session緩衝中的實體物件。一般還會調用clear()或evict(),目的是趕緊儲存,釋放寶貴記憶體資源。
6、Session的commit()/rollback()方法
commit()方法用於提交Session上的事務,否則工作單元不會對資料庫產生影響。如果執行出現異常(也就是commit()失敗了),則之前的操作取消,執行rollback()可撤消之前的操作。
7、Session的close()/isOpen()/isConnected()/reconnect()方法
close()方法關閉Session所對應資料庫連接,與其相關聯的對象生命週期結束。
isOpen()方法檢查Session是否仍然開啟,如果Session已經斷開,則可以使用reconnect(Connection connection)來重新讓Session關聯一個JDBC串連。
isConnected()方法檢查當前Session是否處於串連狀態。
8、Criteria、DetchedCriteria和Query介面
Criteria和Query的執行個體都是和Session綁定的,其生命週期跟隨著Session結束而結束。
DetchedCriteria執行個體相當於一個SQL模板,目的是為了複用。其中的getExecutableCriteria(session)方法接收一個Session對象,並與之綁定,返回一個Criteria對象。
9、Hibernate類的initialize()方法
initialize()方法強制Hibernate立即載入指定實體所關聯的對象和集合。Hibernate類中還有其他幾個很有用但不適很常用的方法。
10、對應檔中的lazy屬性
在Hibernate3中,class元素的lazy屬性預設是true,如果不需要,則需要顯示指定為lazy="false",否則,操作load返回的對象會拋異常。另外Hibernate3中還可以為實體屬性指定lazy屬性。
11、JDBC事務和JTA事務
Hibernate本身沒有交易管理功能,它依賴於JDBC或JTA的交易管理功能,在Hibernate設定檔中,如果不顯式指定Transaction的工廠類別屬性hibernate.transaction.factory_class的配置,則預設為JDBC事務:
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>。
在通過SessionFactory擷取到Session後,與Session相關聯的JDBC Connection執行個體就被設定為false。
特別注意:如果資料庫不支援事務,比如MySQL的MyISAM引擎的表就不支援事務,聲明事務也不會起作用。要使MySQL5的表支援事務,則可以指定表的引擎類型為InnoDB。如果是學習或者研究,目前最好還是使用PostgreSQL 8.3或DB2、Oracle。
JDBC事務總是和一個資料庫連接(或一個Session)相關聯的。
JTA事務則可以跨越多個資料連線(或多個Session),這些串連還可以是不同資料庫的串連,JTA事務一般由容器進行管理。編程只要在多個操作單元的開始和結束定義JTA事務的邊界即可。
特別注意:如果使用了JTA事務,則不能再用在JDBC式的事務來管理每個Session的操作,否則會出錯。為了程式的的通用性,一般來說,都是使用JTA事務來構建應用,這使用任何環境。當然,也可以使用事務代理為每個JDBC的操作方法加入事務控制。這樣也為程式以後移植到JTA容器事務上帶來很大方便。其實現在可以使用Spring的交易管理,與Hibernate結合的非常完美。

PS:persist()方法無傳回值,save()方法返回物件識別碼。
persist()方法只能儲存暫態和持久態的對象,save()方法能儲存任何狀態物件。
共同點:調用完方法後,對象的狀態都變成持久態。
get()方法返回對象的執行個體,而對於load()方法,如果在持久化上下文存在該標識符的對象,就返回該對象的執行個體,否則返回對象的代理,該代理對象只含有物件識別碼。

使用get或load要小心
load可以提高緩衝使用效率 但由於是代理 所以在後面操作會更容易出現問題
get是直接存取db 所以cache的作用就沒了 但會馬上得到結果 麻煩少,但頻繁調用勢必對伺服器壓力增加

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.