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