1. 程式人生 > >hibernate工作原理及作用

hibernate工作原理及作用

hibernate 簡介:
hibernate是一個開源框架,它是物件關聯關係對映的框架,它對JDBC做了輕量級的封裝,而我們java程式設計師可以使用面向物件的思想來操縱資料庫。
hibernate核心介面
session:負責被持久化物件CRUD操作
sessionFactory:負責初始化hibernate,建立session物件
configuration:負責配置並啟動hibernate,建立SessionFactory
Transaction:負責事物相關的操作
Query和Criteria介面:負責執行各種資料庫查詢

hibernate工作原理:

1.通過Configuration config = new Configuration().configure();//讀取並解析hibernate.cfg.xml配置檔案
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>讀取並解析對映資訊
3.通過SessionFactory sf = config.buildSessionFactory();//建立SessionFactory
4.Session session = sf.openSession();//開啟Sesssion
5.Transaction tx = session.beginTransaction();//建立並啟動事務Transation
6.persistent operate操作資料,持久化操作
7.tx.commit();//提交事務
8.關閉Session
9.關閉SesstionFactory

為什麼要用hibernate:


1. 對JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼。
2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是位元組碼增強程式來實現透明性。
4. hibernate的效能非常好,因為它是個輕量級框架。對映的靈活性很出色。它支援各種關係資料庫,從一對一到多對多的各種複雜關係。
 
 Hibernate是如何延遲載入?get與load的區別

1. 對於Hibernate get方法,Hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查詢資料庫,資料 庫中沒有就返回null。這個相對比較簡單,也沒有太大的爭議。主要要說明的一點就是在這個版本(bibernate3.2以上)中get方法也會查詢二級快取!

2. Hibernate load方法載入實體物件的時候,根據對映檔案上類級別的lazy屬性的配置(預設為true),分情況討論: 

(1)若為true,則首先在Session快取中查詢,看看該id對應的物件是否存在,不存在則使用延遲載入,返回實體的代理類物件(該代理類為實體類的子類,由CGLIB動態生成)。等到具體使用該物件(除獲取OID以外)的時候,再查詢二級快取和資料庫,若仍沒發現符合條件的記錄,則會丟擲一個ObjectNotFoundException。

(2)若為false,就跟Hibernateget方法查詢順序一樣,只是最終若沒發現符合條件的記錄,則會丟擲一個ObjectNotFoundException。

這裡get和load有兩個重要區別: 

如果未能發現符合條件的記錄,Hibernate get方法返回null,而load方法會丟擲一個ObjectNotFoundException。

load方法可返回沒有載入實體資料的代 理類例項,而get方法永遠返回有實體資料的物件。

(對於load和get方法返回型別:好多書中都說:“get方法永遠只返回實體類”,實際上並不正 確,get方法如果在session快取中找到了該id對應的物件,如果剛好該物件前面是被代理過的,如被load方法使用過,或者被其他關聯物件延遲加 載過,那麼返回的還是原先的代理物件,而不是實體類物件,如果該代理物件還沒有載入實體資料(就是id以外的其他屬性資料),那麼它會查詢二級快取或者數 據庫來載入資料,但是返回的還是代理物件,只不過已經載入了實體資料。)

總之對於get和load的根本區別,一句話,hibernate對於 load方法認為該資料在資料庫中一定存在,可以放心的使用代理來延遲載入,如果在使用過程中發現了問題,只能拋異常;而對於get方 法,hibernate一定要獲取到真實的資料,否則返回null。

Hibernate中怎樣實現類之間的關係?(如:一對多、多對多的關係)

類與類之間的關係主要體現在表與表之間的關係進行操作,它們都市對物件進行操作,我們程式中把所有的表與類都對映在一起,它們通過配置檔案中的many-to-one、one-to-many、many-to-many、

說下Hibernate的快取機制:

Hibernate快取的作用:
    Hibernate是一個持久層框架,經常訪問物理資料庫,為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料
Hibernate快取分類:
  Hibernate快取包括兩大類:Hibernate一級快取和Hibernate二級快取
Hibernate一級快取又稱為“Session的快取”,它是內建的,意思就是說,只要你使用hibernate就必須使用session快取。由於Session物件的生命週期通常對應一個數據庫事務或者一個應用事務,因此它的快取是事務範圍的快取。在第一級快取中,持久化類的每個例項都具有唯一的OID。 
Hibernate二級快取又稱為“SessionFactory的快取”,由於SessionFactory物件的生命週期和應用程式的整個過程對應,因此Hibernate二級快取是程序範圍或者叢集範圍的快取,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略為被快取的資料提供了事務隔離級別。第二級快取是可選的,是一個可配置的外掛,在預設情況下,SessionFactory不會啟用這個外掛。

什麼樣的資料適合存放到第二級快取中?   
1 很少被修改的資料   
2 不是很重要的資料,允許出現偶爾併發的資料   
3 不會被併發訪問的資料   
4 常量資料   
不適合存放到第二級快取的資料?   
1經常被修改的資料   
2 .絕對不允許出現併發訪問的資料,如財務資料,絕對不允許出現併發   
3 與其他應用共享的資料。 

Hibernate查詢物件如何應用快取?
當Hibernate根據ID訪問資料物件的時候,首先從Session一級快取中查;查不到,如果配置了二級快取,那麼從二級快取中查;如果都查不到,再查詢資料庫,把結果按照ID放入到快取
刪除、更新、增加資料的時候,同時更新快取

Hibernate管理快取例項
無論何時,我們在管理Hibernate快取(Managing the caches)時,當你給save()、update()或saveOrUpdate()方法傳遞一個物件時,或使用load()、 get()、list()、iterate() 或scroll()方法獲得一個物件時, 該物件都將被加入到Session的內部快取中。 
當隨後flush()方法被呼叫時,物件的狀態會和資料庫取得同步。 如果你不希望此同步操作發生,或者你正處理大量物件、需要對有效管理記憶體時,你可以呼叫evict() 方法,從一級快取中去掉這些物件及其集合。 

 Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
1、 屬性查詢
2、 引數查詢、命名引數查詢
3、 關聯查詢
4、 分頁查詢
5、 統計函式

 如何優化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一取代
4.配置物件快取,不使用集合快取
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多型

7. 表字段要少,表關聯不要怕多,有二級快取撐腰

hibernate的開發步驟:

開發步驟
    1)搭建好環境
        引入hibernate最小的jar包
        準備Hibernate.cfg.xml啟動配置檔案
    2)寫實體類(pojo)
    3)為實體類寫對映檔案"User.hbm.xml"
        在hibernate.cfg.xml新增對映的實體
    4)建立庫表
    5)寫測試類
        獲得Configuration
        建立SessionFactory
        開啟Session
        開啟事務
        使用session操作資料
        提交事務
        關閉資源

相關推薦

hibernate工作原理作用 JAVA Hibernate工作原理為什麼要用

轉載自 http://www.cnblogs.com/dashi/p/3597969.html#commentform JAVA Hibernate工作原理及為什麼要用 hibernate 簡介:hibernate是一個開源框架,它是物件關聯關係對映的框架,它對JDBC做了輕量級的封裝,而我們j

hibernate工作原理作用

hibernate 簡介: hibernate是一個開源框架,它是物件關聯關係對映的框架,它對JDBC做了輕量級的封裝,而我們java程式設計師可以使用面向物件的思想來操縱資料庫。 hibernate核心介面 session:負責被持久化物件CRUD操作 sessionFactory:負責初始化hibern

hibernate 的概念透析、工作原理作用

hibernate是一個開源框架,它是物件關聯關係對映的框架,它對JDBC做了輕量級的封裝,而我們Java程式設計師可以使用面向物件的思想來操縱資料庫。 hibernate核心介面 session:負責被持久化物件CRUD操作 sessionFactory:負責初始化hibernate,建立session

hibernate 工作原理為什麽要用

bsp 什麽 分享 com 為什麽 .com 分享圖片 image inf hibernate 工作原理及為什麽要用

JAVA Hibernate工作原理為什麼要用

hibernate 簡介:hibernate是一個開源框架,它是物件關聯關係對映的框架,它對JDBC做了輕量級的封裝,而我們java程式設計師可以使用面向物件的思想來操縱資料庫。hibernate核心介面session:負責被持久化物件CRUD操作sessionFactory:負責初始化hibernate,建

Hibernate工作原理為什麼要用?

原理: 1.讀取並解析配置檔案 2.讀取並解析對映資訊,建立SessionFactory3.開啟Session 4.建立事務Transation 5.持久化操作 6.提交事務 7.關閉Session 8.關閉SesstionFactory為什麼要用: 1. 對JDBC訪問資料

hibernate工作原理流程

使用hibernate開發了幾次小專案,但仍感覺對其理解的不是很到位,在這裡寫篇部落格加深理解。 同學習struts一樣,我個人認為要想熟練掌握一個框架,必先理解其原理。如果只是會用而不知其所以然,這跟照葫蘆畫瓢沒什麼區別。而且後續深入也會很吃力。 在瞭解原理前,先來了解下

hibernate 工作原理 以及作用

hibernate 簡介: hibernate是一個開源框架,它是物件關聯關係對映的框架,它對JDBC做了輕量級的封裝,而我們java程式設計師可以使用面向物件的思想來操縱資料庫。 hibernate核心介面 session:負責被持久化物件CRUD操作 sessionF

SpringMvc 極速快-三平臺開發工作原理作用

上下 struts ont 通用 tex 環境 返回 子郵件 iba 極速快-三平臺開發Q1446595067工作原理: 1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。

SpringMvc Spring 工作原理作用

復雜 script 人員 部分 開發 cit 組件 上下 校驗和 1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。   2.DispatcherServlet查詢一個或多個Ha

spring學習9 Spring工作原理及其作用

支持 上下 構建 並且 tro 配置管理 模塊 operate 有助於 1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。   2.DispatcherServlet查詢一個或多個Han

Webservice工作原理實例

服務端 標準 httppost tac 函數 特定 測試類 數據 綁定 一、Web Service基本概念 Web Service也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求

keepalived工作原理裂腦

keepalived   裂腦1. keepalived服務的工作原理(重點)ükeepalived高可用對之間是通過VRRP協議通信的,因此,我們從VRRP協議介紹:üvrrp協議,全稱virtual router redundancy protocol ,中文名名為虛擬路由冗余協議,VRRP

三層交換工作原理配置

三層交換機 mls(多層交換) cef(cisco快速轉發) 配置命令 楊書凡 三層交換機就是具有部分路由器功能的交換機,三層交換機的最重要目的是加快大型局域網內部的數據交換,所具有的路由功能也是為這目的服務的,能夠做到一次路由,多次轉發。三層交換技術就是二層交換技術+三層轉發技術。

JVM GC Collector工作原理優化

情況 .cn 次數 線程 update mode -1 verify 測試 JVM 調優主要是調整GC以及一些執行參數: 目標: 堆不要太大,不然單次GC的時間過長導致服務器無法響應的問題 壓力測試的時候TPS平穩 盡量避免full GC 檢查是否用了並行的垃圾回收器

線程池的工作原理使用示例

影響 cti run padding 返回值 read mina 容器 原理 . 為什麽要使用線程池? 我們現在考慮最簡單的服務器工作模型:服務器每當接收到一個客戶端請求時就創建一個線程為其服務。這種模式理論上可以工作的很好,但實際上會存在一些缺陷,服務器應用程序中經常出

HTTP協議報文、工作原理Java中的HTTP通信技術詳解

tor 報文 buffered mod protoc 禁止 ans 請求報文 客戶端 博客園 首頁 新隨筆 聯系 管理 訂閱

XML定義 用途 工作原理未來

問題 tar 擴展 href tps 結構化數據 tex 慢慢 解析 1.xml的定義及用途: (1)定義:xml(中文名稱:可擴展標記語言)是一種用於標記電子文件使其具有結構性的標記語言。 (2)用途:它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定

node.js基本工作原理流程

實例 I/O 同步問題 code 本地 https 事情 sans ready 概述 Node.js是什麽 Node 是一個服務器端 JavaScript 解釋器,用於方便地搭建響應速度快、易於擴展的網絡應用。Node.js 使用事件驅動, 非阻塞I/O 模型而得以輕量

rsync工作原理 部署

用戶 users 屬性 需要 禁止ip 虛擬賬戶 開始 業務 rsync命令 ---恢復內容開始---   rsync是一款快速的多功能的 可實現全量及增量的本地或遠程的數據同步備份的工具   rsync在遠程之間進行數據傳輸類似於scp的功能 但又優於scp功能 因為我們