更新時(shí)間:2023-01-05 來(lái)源:黑馬程序員 瀏覽量:
Hibernate是一款免費(fèi)開(kāi)源的持久層操作,它對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,將對(duì)象與數(shù)據(jù)庫(kù)表建立了映射關(guān)系,使Java編程人員可以隨心所欲地使用面向?qū)ο蟮木幊趟枷氩僮鲾?shù)據(jù)庫(kù)。Hibernate具有簡(jiǎn)單易用、靈活性強(qiáng)、擴(kuò)展性強(qiáng)等特點(diǎn),大大提高了程序開(kāi)發(fā)的效率。
使用傳統(tǒng)的JDBC開(kāi)發(fā)小型應(yīng)用系統(tǒng),并不會(huì)有什么麻煩,但是對(duì)于大型應(yīng)用系統(tǒng)的開(kāi)發(fā),使用JDBC就會(huì)顯得力不從心。例如對(duì)幾十、幾百?gòu)埌瑤资畟€(gè)字段的表進(jìn)行插入操作時(shí),編寫(xiě)的SQL語(yǔ)句不但很長(zhǎng),而且繁瑣,容易出錯(cuò);在讀取數(shù)據(jù)時(shí),需要編寫(xiě)多條語(yǔ)句從結(jié)果集中取出各個(gè)字段的信息,工作量非常大。為了提高數(shù)據(jù)訪問(wèn)層的編程效率,GavinKing開(kāi)發(fā)了一個(gè)當(dāng)今最流行的ORM(即Object-Relational Mapping對(duì)象關(guān)系映射)框架——Hibernate框架。
ORM就是利用描述對(duì)象和關(guān)系型數(shù)據(jù)庫(kù)之間的映射信息,自動(dòng)將Java應(yīng)用程序中的對(duì)象持久化到關(guān)系型數(shù)據(jù)庫(kù)的表中。通過(guò)操作Java對(duì)象,就可以完成對(duì)數(shù)據(jù)庫(kù)表的操作??梢园袿RM理解為關(guān)系型數(shù)據(jù)和對(duì)象之間的一個(gè)紐帶,開(kāi)發(fā)人員只需要關(guān)注紐帶一端映射的對(duì)象即可。
Hibernate現(xiàn)在淘汰了嗎?
Hibernate強(qiáng)大到可以說(shuō)用一行代碼就可以解決很多問(wèn)題,但當(dāng)我們想說(shuō)透徹一個(gè)save或者update里面做了哪些動(dòng)作,就涉及到了Hibernate本身和應(yīng)用方面的邏輯,某一行出現(xiàn)了問(wèn)題,下一步該怎么做?阿里選擇了MyBatis,是因?yàn)镸yBatis在開(kāi)發(fā)和調(diào)優(yōu)方面同樣簡(jiǎn)單方便,特別是在處理高并發(fā)和大量數(shù)據(jù)的網(wǎng)站服務(wù)中功不可沒(méi)。
在國(guó)外的市場(chǎng)來(lái)看,Hibernate版本的更新速度要快于國(guó)內(nèi),人氣一度超過(guò)了ibatis。Hibernate在眾多框架中的學(xué)習(xí)曲線還是比較長(zhǎng)的,上手簡(jiǎn)單,但是想把它用好不容易,中文文檔缺乏的比較多一些。但是這些并不能否定Hibernate自身的優(yōu)勢(shì),國(guó)內(nèi)許多IT高手還在用Hibernate,其中的特點(diǎn)像hibernate search從lucene到elasticsearch的平滑過(guò)渡,全文檢索代碼可以說(shuō)幾乎不用做什么調(diào)整或者改動(dòng)。
與其他操作數(shù)據(jù)庫(kù)的技術(shù)相比,Hibernate具有以下幾點(diǎn)優(yōu)勢(shì)。
1.Hibernate對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼進(jìn)行了輕量級(jí)封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼,并且減少了內(nèi)存消耗,加快了運(yùn)行效率。
2.Hibernate使用Java的反射機(jī)制,而不是使用字節(jié)碼增強(qiáng)程序類(lèi),并實(shí)現(xiàn)了透明性。
3.Hibernate的功能強(qiáng)大,映射的靈活性很出色。它支持很多關(guān)系型數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。
4.可擴(kuò)展性強(qiáng),由于源代碼的開(kāi)源以及API的開(kāi)放,當(dāng)本身功能不夠用的時(shí)候,可以自行編碼進(jìn)行擴(kuò)展。
想把任何一種技術(shù)框架用的輕車(chē)熟路,都脫離不開(kāi)貼近業(yè)務(wù)需求和自身駕馭技術(shù)的能力??蚣鼙旧頉](méi)有對(duì)錯(cuò)之分,更多的而是適不適合,Hibernate也是如此。在我們沒(méi)有把一門(mén)技術(shù)做深入地了解或者現(xiàn)實(shí)業(yè)務(wù)需求不能與框架更好地契合時(shí),我們不能盲目去進(jìn)行評(píng)判框架是否過(guò)時(shí)。