【Hibernate】Hibernate基本原理及概念详解
? ? ? ?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語句。Connection、statement、resultset等JDBCAPI與SQL夾雜在一起,開發(fā)效率都很低下。后來出現(xiàn)了DAO模式,所有的JDBCAPI與SQL語句均移到了DAO層,但是仍然需要編寫大量的SQL語句。開發(fā)業(yè)務(wù)復(fù)雜,數(shù)據(jù)表繁雜。
? ? DAO層其實很有規(guī)律。插入數(shù)據(jù)時,無非就是把POJO拆分成各種屬性然后拼裝為SQL語句,保存進(jìn)數(shù)據(jù)庫;讀取數(shù)據(jù)時,無非就是用SQL把POJO的各種屬性從數(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery图片自动轮转动画特效
- 下一篇: 【Hibernate】Hibernate