国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate相關

2019-11-06 06:21:42
字體:
來源:轉載
供稿:網友
對象-關系映射(ORM,Object/Relational Mapping):為了解決JDBC實現對象持久化問題。使業務邏輯和數據訪問細節相分離,在單個組件中負者所有實體對象持久化,一種實現方式是利用硬編碼方式,為每一種可能的數據庫訪問操作提供單獨的方法。Hibernate是基于javaEE平臺上一種開放源代碼的ORM框架技術,完全的關系型數據庫的OR映射,提供管理Java對象到數據庫表的映射,提供數據查詢和獲取數據的方法,事務處理,生命周期管理不依賴于JavaEE容器。5個核心接口API:Configuration:用于Hibernate配置,Hibernate啟動中,實現該接口類首先定位映射文檔位置,讀取配置文件信息,創建一個sessionFaction對象SessionFactory:產生Session對象,一個SessionFactory對象代表一個數據庫,被所有客戶程序在內存共享,用它來得到不同的Session對象。Session:提供對數據持久對象操作方法,持久對象緩沖區,檢測緩沖區中的持久對象是否已經改變,并且及時刷新數據庫,保證Session中對象與數據庫同步。Transaction:不依賴于容器,使用自己的API來調用底層事務API(如:Jdbc Api、JTA)打到事務處理目的。Query&Criteria:Query接口可以方便地對數據庫及持久對象進行查詢,Criteria接口與Query接口非常類似,它允許創建并執行面向對象的標準化查詢。實體對象在Hibernate中狀態:瞬時(臨時)狀態:當實例化一個持久化對象,此時當前對象所保存的數據與數據庫沒有任何關系。持久狀態:當Hibernate API把處于瞬時狀態的持久化對象與數據庫中的數據進行關聯,對象具有唯一的OID。游離狀態:當Hibernate API的Session關閉后,對象不在持久化管理之內,此時處于游離狀態。Session接口操作方法:save:將臨時對象轉變為持久對象,不應將持久對象或游離對象傳遞給save方法,若持久對象傳遞save該操作多余,若游離對象傳遞save,則重新生成OID,再保存一次。saveOrUpdate:包含save方法與update方法功能,如果傳入臨時對象則調用save,如果是游離對象則調用update。注:Hibernate根據對象OID,version版本熟悉來判斷參數是臨時對象還是游離對象persist:將臨時對象轉變為持久對象,persist不保證立即為持久對象OID賦值,可能在session清理緩存才賦值,在事務邊界以外調用persist方法,則該方法不會執行insert語句,而save無論在事務邊界意外還是以內都會執行insert。注:save返回Serializable對象,persist返回void。load&get:都能根據從給定的OID從數據庫中加載一個持久化對象,都會首先查一級緩存,沒查到則查詢二級緩存,再找不到則發送一條SQL語句。load:當對象.hbm.xml配置文件class元素的lazy屬性設置為true,當數據庫不存在OID對應記錄時,只會返回一個代理對象,只有在對象getId之外的其他方法調用時才會真正訪問數據庫,在某些情況下大幅度提高性能,采用配置加載策略(默認:延遲加載),如果設置為false時則立即執行數據庫并直接返回實體類。get:當數據不存在OID對應記錄時返回null。會忽略配置,采用立即加載。clear:對session里的緩存進行清理evict:把指定緩沖對象進行清除flush:對數據庫同步語句,執行完后立即刷新到數據庫。update:使一個游離對象轉變為持久對象,不會進行版本檢測,直到session.flush時,會先進行版本檢測,再進行更新操作。lock:執行lock時,會立即使用查詢語句查詢版本號進行版本檢測,將沒有更改過的游離狀態對象變成持久狀態,merge:將游離對象屬性復制到持久對象中。注:流程:1、根據OID到session中查找,若存在則將游離對象屬性復制到持久化對象,計劃執行一條update語句,然后返回持久化對象引用。2、如果session沒找到,則試圖根據OID從數據庫加載持久化對象,如果數據庫存在匹配持久化對象,則將游離對象屬性復制到剛加載的持久化對象中,計劃實行一條update語句,然后返回持久化對象引用。3、如果數據庫中也不存在或者對象時臨時對象,則會新建一個對象,將屬性賦值到新建對象中,在持久化新建對象,最后返回新建對象引用。與saveOrUpdate區別是,調用完meger對象仍然是托管狀態delete:從數據庫中刪除一個java對象,可以刪除持久化類,也可以刪除游離對象.注:1、如果傳入的是游離對象,則先使游離對象與session關聯,變為持久對象,如果是持久對象則忽略該步2、計劃執行delete語句。3、把對象從session緩存中刪除,該對象進入刪除狀態。replicate:將一個數據庫中的對象復制到另一個數據庫中Query對象查詢:list:執行HQL查詢語句,直接操作SQL訪問數據庫iterate:執行HQL查詢語句,會根據主鍵字段到一二級緩存里查找,有就加入到查詢結果,沒有則執行查詢語句uniqueResult:統計計數Criteria對象查詢:list:PRojections聚合函數:groupProperty:avg:求平均count:統計max:最大min:最小countDestinct:某列非重復記錄的總數注:支持別名、多態、排序、分頁、參數綁定、命名查詢,使用Critterion對象設置查詢條件,使用Expression.條件進行設置條件SQLQuery本地SQL查詢:list:CallableStatement存儲過程調用:execute:batch-size:設定對數據庫進行批量刪除、更新、插入時候的批次大小,批量操作數量設置。一般設置50fetch_size:設定JDBC的Statement讀取數據時,每次從數據庫中取出的記錄條數 設置50或100 比較合理   -- MySQL不支持,Oracle支持注:HQL(Hinberante Query Language)二級緩存框架:EHCache:OSCache:JBossCache:面試問題:hibernate中sorted collection和ordered collection有什么不同?sorted collection:通過java的 comparator在內存中排序。ordered collection:使用數據庫order by字句進行排序。注:對于比較大數據集,避免內存溢出,最好使用ordered collectionlock方法與update方法區別?兩個方法都是將游離對象與一個session實例關聯起來,不同的是在執行lock方法時,會立即使用版本查詢語句進行版本檢測,不執行update操作,而update方法,并不會進行版本檢測,直到session.flush時,會先進行版本檢測,再進行更新操作。Hibernate實體類定義為final類?可以,但這種做法并不好,因為Hibernate會使用代理模式在延遲關聯情況下提高性能,如果把實體定義為final類后,因為java不允許對final類進行擴展,所以Hibernate就無法使用代理了。則限制了使用可以提升性能的手段。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶山市| 射洪县| 甘南县| 南充市| 辽阳县| 浑源县| 伊吾县| 吐鲁番市| 本溪市| 阿图什市| 河源市| 旅游| 阿拉善右旗| 武城县| 梁平县| 东兰县| 色达县| 常宁市| 明星| 洱源县| 定安县| 石阡县| 临汾市| 南安市| 旺苍县| 柳州市| 高邑县| 施甸县| 环江| 临江市| 望都县| 芮城县| 游戏| 思南县| 白朗县| 长春市| 南充市| 通渭县| 紫云| 伊金霍洛旗| 乌兰县|