在項目中使用Hibernate進行大數據量的性能測試,有一些總結, 1)在處理大數據量時,會有大量的數據緩沖保存在Session的一級緩存中,這緩存大太時會嚴重顯示性能,所以在使用Hibernate處理大數據量的,可以使用session.clear()或者session. Evict(Object)在處理過程中,清除全部的緩存或者清除某個對象。
自從JPA于2006年首次被引入之后,它就得到了Java開發社區的廣泛支持。該規范的下一個主要更新——2.0版本(JSR317)——將在2009年年底完成。JPA2.0引入的關鍵特性之一就是CriteriaAPI,它為Java語言帶來了一種獨特的能力:開發一種Java編譯器可以在運行時驗證其正確性的查詢。CriteriaAPI還提供一個能夠在運行時動態地構建查詢的機制。本文將介紹CriteriaAPI和與之密切相關的元模型(metamodel)概念。
JPA(Java Persistence API)是Sun官方提出的Java持久化規范。它為Java開發人員提供了一種對象/關系映射工具來管理Java應用中的關系數據。他的出現主要是為了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate、TopLink等ORM框架各自為營的局面。值得注意的是,JPA是在充分吸收了現有Hibernate、TopLink等ORM框架的基礎上發展而來的,具有易于使用、伸縮性強等優點。從目前的開發社區的反應上看,JPA受到了極大的支持和贊揚,其中就包括了Spring與EJB3.0的開發團隊。著眼未來幾年的技術走向,JPA作為ORM領域標準化整合者的目標應該不難實現。
Hibernate Tools for Eclipse Plugins 的安裝和使用,這段時間事情比較多一直沒有寫博客,現在事情忙完了,公司的書柜里有一堆關于Hibernate、Struts和Spring的書,翻了翻發現書中的內容基本上都過時,我喜歡從官方網站上看資料學習最新的技術,這次是我閱讀了Hibernate Tools的官方Documents后根據自己的實踐總結的。
Eclipse中反向生成hibernate實體類+jpa注釋
Hibernate 3 配置文件參數匯總
Hibernate注釋大全
Hibernate集合映射中,經常會使用到"inverse"和"cascade"這兩個屬性。對于我這樣,Hibernate接觸不深和語文水平夠爛的種種因素,發現這兩個屬性實在是難以理解,無奈只好將這個兩個屬性解釋工作交給了Google和Baidu,查看了許多牛人的解釋,加上自己在Eclipse上的調試,對"inverse"和"cascade"這兩個屬性有了一定的見解。
Hibernate是筆者使用了超過5年的優秀ORM框架,雖然說使用了5年,但筆者并沒有把握說自己真正意義上的精通Hibernate。說道熟悉Hibernate還差不多,因為Hibernate用法和特性只要使用過或許都很簡單,但是要做到發揮Hibernate最大限度的潛力,Hibernate優化,或者說Hibernate性能優化筆者僅僅是初窺門徑而已。這里摘錄一篇牛人對于Hibernate優化的文章,希望對自己以后的使用指引下方向吧。這篇是上一篇的續作,著實是不錯,推薦hibernate用戶,尤其是像我一樣的用戶看看,會有收獲的
數據庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復并使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。
Hibernate悲觀鎖:在數據有加載的時候就給其進行加鎖,直到該鎖被釋放掉,其他用戶才可以進行修改;Hibernate樂觀鎖:在對數據進行修改的時候,對數據才去版本或者時間戳等方式來比較,數據是否一致性來實現加鎖。
Hibernate關系映射
事務并發時可能出現的問題: ※丟失更新:兩個事務A和B讀入同一數據并修改,A事務修改后提交,但B事務仍在執行,B仍然是按照一開始讀到是數據做修改,此時,A的修改就被丟失掉了! ※不可重復讀:事務A讀取數據后,事務B對數據執行更新操作[包括修改數據、增刪記錄],使A再次讀取的數據與第一次讀的不一致! ※讀“臟”數據:【即不正確的數據】事務A修改了某一數據并將其寫回磁盤,事務B讀取同一數據后,A由于某種原因被撤銷,這時A已修改過的數據恢復原值,而B讀到的數據就與數據庫中的數據不一致,則B讀到的數據就是“臟”數據!
配置映射文件詳解目標學習Hibernate的配置文件(hibernate.cfg.xml)學習Hibernate的映射聲明(*.hbm.xml)Hibernate配置文件Hibernate配置文件主要用于配置數據庫連接和Hibernate運行時所需的各種屬性每個Hibernate配置文件對應一個Configuration對象。
在向大家詳細介紹Hibernate Session緩存之前,首先讓大家了解下主配置,然后全面介紹延遲加載。
MyBatis是支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJOs(Plan Old Java Objects,普通的Java對象)映射成數據庫中的記錄。
Hibernate原理模擬 – 什么是O/RMapping以及為什么要有O/RMapping 常見的O/R框架(了解) hibernate基礎配置(重點) ID生成策略(重點掌握AUTO) Hibernate核心開發接口介紹(重點) 對象的三種狀態(了解) 關系映射(重點) Hibernate查詢(HQL) 在Struts基礎上繼續完善BBS2009 性能優化(重點)
上次我們一起學習了用Criteria進行相關的操作,但由于Criteria并不是Hibernate官方推薦的查詢方式,我們也并不多用。現在我們來看一下官方推薦的HQL,一起學習一下它的強大。說是HQL,也就是Hibernate查詢語句,和SQL有什么區別呢?一個字母的區別,哈哈。
批量更新是指在一個事務中更新大批量數據,批量刪除是指在一個事務中刪除大批量數據。以下程序直接通過Hibernate API批量更新CUSTOMERS表中年齡大于零的所有記錄的AGE字段。
當我們用HQL進行子查詢的時候,如select * from Tree where pid in (select id from Tree,此時HIBERANTE就會報錯,說什么*號錯誤之類的。但如果將*改為Tree類里的所有子段時就不會有問題了。就會像平時一樣第一行數據返回一個Object[],然后你再根據Tree類里字段對Object[]數組里的值進行轉換。這樣一來比較麻煩。今天發現如果我SQL來查有一個方法可以返回一個對象的。