日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate工作原理

發布時間:2025/5/22 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate工作原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????現在我們知道了一個概念Hibernate Session,只有處于Session管理下的POJO才具有持久化操作能力。當應用程序對于處于Session管理下的POJO實例執行操作時,Hibernate將這種面向對象的操作轉換成了持久化操作能力。

HIbernate簡要的體系結構如下圖所示:

??????? 通過上圖能夠發現HIbernate需要一個hibernate.properties文件,該文件用于配置Hibernate和數據庫連接的信息。還需要一個XML文件,該映射文件確定了持久化類和數據表、數據列之間的想對應關系。

除了使用hibernate.properties文件,還可以采用另一種形式的配置文件: *.cfg.xml文件。在實際應用中,采用XML配置文件的方式更加廣泛,兩種配置文件的實質是一樣的。

??????? Hibernate的持久化解決方案將用戶從赤裸裸的JDBC訪問中釋放出來,用戶無需關注底層的JDBC操作,而是以面向對象的方式進行持久層操作。底層數據連接的獲得、數據訪問的實現、事務控制都無需用戶關心。這是一種“全面解決”的體系結構方案,將應用層從底層的JDBC/JTA API中抽象出來。通過配置文件來管理底層的JDBC連接,讓Hibernate解決持久化訪問的實現。這種“全面解決”方案的體系結構圖如圖所示:

??????? 針對以上的Hibernate全面解決方案架構圖:

????? (1)SessionFactory這是Hibernate的關鍵對象,它是單個數據庫映射關系經過編譯后的內存鏡像,它也是線程安全的它是生成Session的工廠,本身要應用到ConnectionProvider,該對象可以在進程和集群的級別上,為那些事務之間可以重用的數據提供可選的二級緩存。

????? (2)Session:它是應用程序和持久存儲層之間交互操作的一個單線程對象。它也是Hibernate持久化操作的關鍵對象,所有的持久化對象必須在Session的管理下才能夠進行持久化操作。此對象的生存周期很短,其隱藏了JDBC連接,也是Transaction 的工廠。Session對象有一個一級緩存,現實執行Flush之前,所有的持久化操作的數據都在緩存中Session對象處。

??????(3)持久化對象:系統創建的POJO實例一旦與特定Session關聯,并對應數據表的指定記錄,那該對象就處于持久化狀態,這一系列的對象都被稱為持久化對象。程序中對持久化對象的修改,都將自動轉換為持久層的修改。持久化對象完全可以是普通的Java Beans/POJO,唯一的特殊性是它們正與Session關聯著。

????? (4)瞬態對象和脫管對象:系統進行new關鍵字進行創建的Java 實例,沒有Session 相關聯,此時處于瞬態。瞬態實例可能是在被應用程序實例化后,尚未進行持久化的對象。如果一個曾今持久化過的實例,但因為Session的關閉而轉換為脫管狀態。

????? (5)事務(Transaction):代表一次原子操作,它具有數據庫事務的概念。但它通過抽象,將應用程序從底層的具體的JDBC、JTA和CORBA事務中隔離開。在某些情況下,一個Session 之內可能包含多個Transaction對象。雖然事務操作是可選的,但是所有的持久化操作都應該在事務管理下進行,即使是只讀操作。

????? (6)連接提供者(ConnectionProvider):它是生成JDBC的連接的工廠,同時具備連接池的作用。他通過抽象將底層的DataSource和DriverManager隔離開。這個對象無需應用程序直接訪問,僅在應用程序需要擴展時使用。

????? (7)事務工廠(TransactionFactory):他是生成Transaction對象實例的工廠。該對象也無需應用程序的直接訪問。

? Hibernate進行持久化操作離不開SessionFactory對象,這個對象是整個數據庫映射關系經過編譯后的內存鏡像,該對象的openSession()方法可打開Session對象。SessionFactory對想是由Configuration對象產生。

每個Hibernate配置文件對應一個configuration對象。在極端情況下,不使用任何配置文件,也可以創建Configuration對象。

?

一. 創建Configuration對象

??????? org.hibernate.cfg.Configuration實例代表一個應用程序到SQL數據庫的映射配置,Configuration提供了一個buildSessionFactory()方法,該方法可以產生一個不可變的SessionFactory對象。

??????? 你可以直接實例化Configuration來獲取一個實例,并為它指定一個Hibernate映射文件,如果映射文件在類加載路徑中,則可以使用addResource()方法來添加映射定義文件。那么現在的問題就是如何創建Configuration對象呢?

隨著Hibernate 所使用的配置文件的不同,創建Configuration對象的方式也不相同。通常有幾種配置Hibernate的方式:

第一種是使用hibernate.properties文件作為配置文件。

第二種是使用hibernate.cfg.xml文件作為配置文件。

第三種是不使用任何的配置文件,以編碼方式來創建Configuration對象。

請注意:Configuration對象的唯一作用就是創建SessionFactory實例,所以它才被設計成為啟動期間對象,而一旦SessionFactory對象創建完成,它就被丟棄了。

?

1. 使用hibernateproperties作為配置文件

??????? 對于hibernate.properties作為配置文件的方式,比較適合于初學者。因為初學者往往很難記住該配置文件的格式,以及需要配置哪些屬性。在Hibernate發布包的etc路徑下,提供了一個hibernate.properties文件,該文件列出了Hibernate 的所有屬性。每個配置段都給出了大致的注釋,用戶只要取消所需配置段的注釋,就可以快速配置Hibernate和數據庫的鏈接此處給出使用hibernate.properties文件創建Configuration對象的方法。

//實例化configuration對象 Configuration cfg = new Configuration() //多次調用addResource()方法,添加映射文件 .addResource("Item.hbm.xml") .addResource("Bid.hbm.xml");

??????? 查看hibernate.properties文件發現,該文件沒有提供Hibernate映射文件的方式。因此使用hibernate.properties文件來作為配置文件時,必須使用Configuration的.addResource()方法,使用該方法來添加映射文件。

注意:正如上面的代碼所示,使用hibernate.properties文件配置Hibernate的屬性固然簡單,但是因為要手動添加映射文件,當映射文件極其多時,這是一件非常催人淚下的事情。這也就是在實際開發中,不常使用hibernate.properties文件作為配置文件的原因。

??????? 當然還有另一種添加配置文件的策略,因為映射文件和持久化類是一一對應的,可以通過Configuration對象來添加持久化類,讓Hibernate自己來搜索映射文件。

//實例化configuration對象 Configuration cfg = new Configuration) //多次調用addClass()方法,直接添加持久化類 .addClass(ppp.Item.class) .addClass(ppp.BId.class);

?

2. 使用hibernate.cfg.xml作為配置文件

???????? 前面已經看到使用hibernate.properties作為配置文件的情形。因為hibernate.cfg.xml中已經添加了hibernate的映射文件,采用這種配置文件創建configuration對象實例由以下代碼實現:

//實例化configuration對象 Configuration cfg = new Configuration() //configure()方法將會負責加載hibernate.cfg.xml文件 .configure()

??????? 需要注意的是:在通過new關鍵字創建Configuration對象之后,不要忘記調用configure()方法。

?

二. hibernate.properties和hiberntae.cfg.xml文件

??????? 如果使用etc路徑下的hibernate.properties文件作為配置文件的模板,修改此模板文件作為Hibernate配置文件,這種方式的確是快速進入Hibernate開發的方法。但是對于實際開發,通常會使用hibernate.cfg.xml文件作為配置文件。

深入對比hibernate.properties和hibernate.cfg.xml文件后看如下的hibernate.properties的一個配置屬性:

//指定數據庫的方言 hibernate.dialect org.hibernate.dialect.MySQLDialect

上面的一行代碼是典型的Properties文件的的格式,前面的key為hibernate.dialect?, 后面的value是為org.hibernate.dialect.MySQLDialect。

接下來我們再來查看hibernate.cfg.xml文件中的相對應的配置代碼:

<property name = "dialect">org.hibernate.dialect.MySQLDialect</property>

同樣指定了Hibernate的Dialect 屬性是org.hibernate.dialect.MySQLDialect 。對比兩種格式的文件,可以發現雖然格式不同但其實質完全一樣。

總結

以上是生活随笔為你收集整理的Hibernate工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91精品婷婷国产综合久久蝌蚪 | 欧美日韩国产a | 日本www在线观看 | 91 高清 在线 制服 偷拍 | 久久久久亚洲精品中文字幕 | 欧美黄色免费网站 | 欧洲午夜视频 | 在线免费av网 | 国产xxxx在线 | 黄色免费av | 顶级尤物极品女神福利视频 | 9l视频自拍九色9l视频成人 | 精品婷婷| 两个小y头稚嫩紧窄h文 | 国产情侣呻吟对白高潮 | 午夜一级在线 | 久久久久成人网站 | 亚洲欧美日韩一区在线观看 | 亚洲视屏在线观看 | 五月婷婷俺也去 | 天天操夜夜拍 | 免费看日韩毛片 | 最新av电影网站 | 黄色网免费看 | 国产美女作爱全过程免费视频 | 草草在线观看视频 | 国产一区二区成人 | 日韩成人在线免费观看 | 成人在线精品视频 | 国产精品国语对白 | 欧美色图自拍 | 一级片视频免费看 | 极品一区| xvideos永久免费入口 | 免费的污网站 | 国产影视一区二区三区 | 国产成人无码AA精品区 | 本庄优花番号 | 午夜精品久久久久久久久久蜜桃 | 国产chinasex对白videos麻豆 | 伦理片一区二区 | 久久作爱视频 | 人人干免费| 亚洲影视精品 | 国产高清日韩 | 黄色18网站| 大地资源在线观看免费高清版粤语 | 丁香色婷婷 | 苍井空张开腿实干12次 | 国产乱人乱偷精品视频a人人澡 | 色综合久久88色综合天天 | 婷婷久久综合 | 葵司有码中文字幕二三区 | 国产精品一二三四区 | 青青草在线免费观看 | 蜜臀av一区二区三区激情综合 | 久久一区二 | 久久久久久无码精品人妻一区二区 | 中文字幕无线码一区 | 东方av在线免费观看 | 欧美日韩在线精品 | 欧美成人乱码一区二区三区 | 青青草原av在线 | 久久国产亚洲精品无码 | 亚洲精品视频免费看 | 啪网址 | 成人做爰www看视频软件 | 精品人妻无码一区二区三区 | 99激情网| 黄a网站| 亚洲美女高潮久久久 | 亚洲精品一区二区三区影院忠贞 | 亚洲在线视频免费观看 | 日韩在线播放av | av尤物| 韩国女主播一区二区 | 电影《两个尼姑》免费播放 | 中文字幕五码 | 丰满少妇高潮一区二区 | 一区二区三区免费看视频 | 日本三不卡| 成人av入口 | 91成人精品一区在线播放 | av白浆| 欧美在线观看不卡 | 中文字幕亚洲乱码熟女一区二区 | 欧美性教育视频 | 国产精品免费久久久久 | 国精产品一品二品国精品69xx | 久久久久久久久久亚洲 | 亚洲尹人 | 性高潮网站 | 亚洲男人天堂2017 | 少妇高潮一区二区三区四区 | 国产98色在线 | 日韩 | 精品一区国产 | 欧美日韩一区二区区别是什么 | 亚洲妇女体内精汇编 | 色综合区|