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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Hibernate】Hibernate基本原理及概念详解

發(fā)布時間:2024/4/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Hibernate】Hibernate基本原理及概念详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ?hibernate是一種ORM框架(全稱為Object-Relative Database-Mapping,在java對象與數(shù)據(jù)庫之間建立某種映射,以實現(xiàn)直接存取java對象(一般為POJO)),與各種數(shù)據(jù)庫,SQL語句打交道,是數(shù)據(jù)持久化的一種解決方案。ORM框架是不同于MVC的另一種思想框架,適用范圍也與MVC截然不同。類似功能的框架還有SUN的JDO、Oracle公司的TopLink、Apache的iBatis和openJPA等。

?在商業(yè)系統(tǒng)的開發(fā)中,數(shù)據(jù)庫持久化是比較核心的技術(shù)之一。傳統(tǒng)的數(shù)據(jù)持久化編程中,需要使用JDBC并配合大量的SQL語句。ConnectionstatementresultsetJDBCAPISQL夾雜在一起,開發(fā)效率都很低下。后來出現(xiàn)了DAO模式,所有的JDBCAPISQL語句均移到了DAO層,但是仍然需要編寫大量的SQL語句。開發(fā)業(yè)務(wù)復(fù)雜,數(shù)據(jù)表繁雜。

? ? DAO層其實很有規(guī)律。插入數(shù)據(jù)時,無非就是把POJO拆分成各種屬性然后拼裝為SQL語句,保存進(jìn)數(shù)據(jù)庫;讀取數(shù)據(jù)時,無非就是用SQLPOJO的各種屬性從數(shù)據(jù)庫讀出來,然后拼裝成POJO對象返回。而且POJO與數(shù)據(jù)庫表、POJO屬性與數(shù)據(jù)表的列,都存在著某種固定的映射關(guān)系。如果能夠用程序自動生成SQL語句就好了。

? ? ORM就是做這種工作的框架。它通過配置文件或者使用java注解把java對象映射到數(shù)據(jù)庫上,自動生成SQL語句并執(zhí)行。ORM技術(shù)已經(jīng)十分成熟,廣泛應(yīng)用于各種大規(guī)模的系統(tǒng)中。

?Hibernate的原理

?

???? JDBC編程中,開發(fā)者通過在DAO層編寫INSERTSQL語句插入數(shù)據(jù)庫,編寫UPDATE SQL更新數(shù)據(jù)庫,編寫DELETE語句刪除數(shù)據(jù),通過SELECT語句查詢數(shù)據(jù)。在hibernate中原理也是一樣的,只不過hibernate充當(dāng)了DAO層,根基POJO與實體類的映射配置自動生成相應(yīng)的SQL語句。從控制臺輸出可以看到hibernate生成的SQL語句。

???????JDBC中的SQL語句是由開發(fā)者事先寫好的,而hibernate中的SQL是動態(tài)生成的。因此如果實體類發(fā)生變化,則在JDBC中需要修改所有的相關(guān)SQL語句,這樣會使工作量加大,而在hibernate只需要修改實體類配置。


Hibernate的核心組件


在基于MVC設(shè)計模式的JAVA WEB應(yīng)用中,Hibernate可以作為模型層/數(shù)據(jù)訪問層。它通過配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA對象或PO(PersistentObject,持久化對象)映射到數(shù)據(jù)庫中的數(shù)據(jù)庫,然后通過操作PO,對數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行增,刪,改,查等操作。
除配置文件,映射文件和持久化類外,Hibernate的核心組件包括以下幾部分:
a)Configuration:用來讀取Hibernate配置文件,并生成SessionFactory對象。
b)SessionFactory接口:產(chǎn)生Session實例工廠。
c)Session接口:用來操作PO。它有g(shù)et(),load(),save(),update()和delete()等方法用來對PO進(jìn)行加載,保存,更新及刪除等操作。它是Hibernate的核心接口。
d)Query接口:用來對PO進(jìn)行查詢操。它可以從Session的createQuery()方法生成。
e)Transaction接口:用來管理Hibernate事務(wù),它主要方法有commit()和rollback(),可以從Session的beginTrancation()方法生成。


Persistent Object


持久化對象可以是普通的Javabeans,惟一特殊的是它們與(僅一個)Session相關(guān)聯(lián)。JavaBeans在Hibernate中存在三種狀態(tài):
1.臨時狀態(tài)(transient):當(dāng)一個JavaBean對象在內(nèi)存中孤立存在,不與數(shù)據(jù)庫中的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系時,那么這個JavaBeans對象就稱為臨時對象(TransientObject)。
2.持久化狀態(tài)(persistent):當(dāng)一個JavaBean對象與一個Session相關(guān)聯(lián)時,就變成持久化對象(PersistentObject)
3.脫管狀態(tài)(detached):在這個Session被關(guān)閉的同時,這個對象也會脫離持久化狀態(tài),就變成脫管狀態(tài)(DetachedObject),可以被應(yīng)用程序的任何層自由使用,例如可以做與表示層打交道的數(shù)據(jù)輿對象(Data Transfer Object)。


Hibernate的運(yùn)行過程


Hibernate的運(yùn)行過程如下:
A:應(yīng)用程序先調(diào)用Configration類,該類讀取Hibernate的配置文件及映射文件中的信息,并用這些信息生成一個SessionFactory對象。
B:然后從SessionFactory對象生成一個Session對象,并用Session對象生成Transaction對象;可通過Session對象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法對PO進(jìn)行加載,保存,更新,刪除等操作;在查詢的情況下,可通過Session對象生成一個Query對象,然后利用Query對象執(zhí)行查詢操作;如果沒有異常,Transaction對象將 提交這些操作結(jié)果到數(shù)據(jù)庫中。


Hibernate的運(yùn)行過程:




總結(jié)hibernate工作原理如下:


1、通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件

2、由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>讀取解析映射信息。

3、通過config.buildSessionFactory();//得到sessionFactory。

4、sessionFactory.openSession();//得到session。

5、session.beginTransaction();//開啟事務(wù)。

6、persistent operate;

7、session.getTransaction().commit();//提交事務(wù)

8、關(guān)閉session;

9、關(guān)閉sessionFactory;

?

總結(jié)

以上是生活随笔為你收集整理的【Hibernate】Hibernate基本原理及概念详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。