淺論hibernate與mybatis框架

? ? ? ?在做邏輯的推演時(shí),首先我們要確定一個(gè)準(zhǔn)確無(wú)誤的二庵、一般性的原則作為前提。只有保證這個(gè)前提是絕對(duì)的缓呛、無(wú)差別的催享,才能夠證明結(jié)論是正確的,整個(gè)邏輯的論證才是可信的哟绊。因此無(wú)論任何科學(xué)因妙,找到一個(gè)絕對(duì)的、一般性的指導(dǎo)原則是迫切和必須的票髓。沒(méi)有這個(gè)原則攀涵,一切研究將是毫無(wú)意義的。就像斯威夫特在他的《格列佛游記》中諷刺的那樣:“他們終其一生在進(jìn)行研究洽沟,研究從黃瓜中提取陽(yáng)光以故,將大便還原為食物”。我們的時(shí)代也不斷在進(jìn)行這樣的研究裆操,研究用水來(lái)代替石油怒详,去太空中尋找反物質(zhì)。這些研究無(wú)疑都取得了巨大的成功踪区,獲得了大量的經(jīng)費(fèi)昆烁,堪稱(chēng)騙術(shù)界的楷模與典范。但也僅此而已缎岗,這種成功是時(shí)代的成功静尼,而非歷史的成功。歷史終將剔除一切虛妄的東西传泊,回歸真實(shí)鼠渺。“我從這里開(kāi)始眷细;因?yàn)槲覍⒅匦禄氐竭@里拦盹。”——巴門(mén)尼德《論自然》

? ? ? ? 一切科學(xué)都是有一個(gè)確定無(wú)誤的前提的薪鹦,例如幾何學(xué)研究物質(zhì)的形狀掌敬,點(diǎn)的概念構(gòu)成了整個(gè)幾何學(xué)的基礎(chǔ);數(shù)學(xué)研究物質(zhì)的量池磁,它的理論基礎(chǔ)實(shí)際上是建立在差異性上的奔害,也就是說(shuō),承認(rèn)每一個(gè)都是一地熄,而不是多华临。只有這樣再做四則運(yùn)算時(shí),1+1才會(huì)等于2端考。計(jì)算機(jī)科學(xué)當(dāng)然有它的特殊性:我們研究的東西并非是自在的存在著雅潭,而是人類(lèi)思維的產(chǎn)物,是人類(lèi)生產(chǎn)力發(fā)展的產(chǎn)物却特。甚至可以說(shuō)扶供,它更像是一門(mén)技術(shù),而非科學(xué)裂明。它的存在是為了解決人類(lèi)事務(wù)中的一些問(wèn)題椿浓,因此也會(huì)受到人類(lèi)事務(wù)的一般規(guī)則的約束。在這門(mén)學(xué)科不斷的發(fā)展中闽晦,它嘗試著模擬現(xiàn)實(shí)世界扳碍,從機(jī)器語(yǔ)言一直到現(xiàn)在的高級(jí)計(jì)算機(jī)語(yǔ)言,它更加表現(xiàn)出科學(xué)的性質(zhì)仙蛉。我們現(xiàn)在所了解的設(shè)計(jì)模式笋敞、一些設(shè)計(jì)原則,全部是建立在高等計(jì)算機(jī)語(yǔ)言上的荠瘪。java語(yǔ)言毫無(wú)疑問(wèn)是比較優(yōu)秀的計(jì)算機(jī)語(yǔ)言之一夯巷,它的面向?qū)ο蟮脑O(shè)計(jì)思想使我們可以研發(fā)出可以輕松處理復(fù)雜事務(wù)軟件。它將現(xiàn)實(shí)世界中抽象的哀墓、一般的行為描述為類(lèi)鞭莽,而將某個(gè)類(lèi)特殊的實(shí)例稱(chēng)之為對(duì)象。就像現(xiàn)實(shí)世界中有“人”的抽象的概念麸祷,而張三這個(gè)具體的人則是“人”這個(gè)類(lèi)的具體實(shí)現(xiàn)澎怒。java的設(shè)計(jì)思想繼承了C、C++阶牍。繼承在英文中叫做extends喷面,有繼承和擴(kuò)展的意思,與中文中的繼承有著很大的不同走孽,更多的表現(xiàn)為擴(kuò)展惧辈。也就是說(shuō)java揚(yáng)棄了C++的某些東西,而成為現(xiàn)在的語(yǔ)言磕瓷。

? ? ? ? hibernate嘗試在這一點(diǎn)上走的更遠(yuǎn)盒齿,它提出并實(shí)踐了ORM(對(duì)象關(guān)系映射)這一思想念逞,試圖將所有的問(wèn)題描述為類(lèi)和對(duì)象的關(guān)系。這是有很積極意義的边翁。hibernate的思想得以實(shí)現(xiàn)翎承,很大程度上依賴(lài)于JDK的反射技術(shù)。通過(guò)反射符匾、XML解析叨咖、注解,它可以很容易的將數(shù)據(jù)庫(kù)表映射為一個(gè)對(duì)象啊胶,并且通過(guò)標(biāo)記對(duì)象的狀態(tài)來(lái)判斷對(duì)象的行為(框架的技術(shù)細(xì)節(jié)不在該篇進(jìn)行討論)甸各。hibernate旨在提供給開(kāi)發(fā)人員一個(gè)標(biāo)準(zhǔn)的、簡(jiǎn)易的開(kāi)發(fā)模式焰坪,使程序員不必過(guò)多的關(guān)心SQL——有人會(huì)對(duì)這一點(diǎn)提出異議嗎趣倾?使用簡(jiǎn)易并且標(biāo)準(zhǔn)化,這其實(shí)是每一個(gè)框架的設(shè)計(jì)初衷某饰。如果必須要大費(fèi)周折寫(xiě)出一段執(zhí)行簡(jiǎn)單功能的代碼誊酌,才能夠顯示出個(gè)人技術(shù)的高深莫測(cè),我們何不自己封裝JDBC露乏?

? ? ? ? 現(xiàn)在回到最初討論的話(huà)題上來(lái):我們要找出框架設(shè)計(jì)的原則碧浊,符合這一原則的我們就認(rèn)為是好的,否則無(wú)論這個(gè)框架的實(shí)現(xiàn)原理有多么復(fù)雜瘟仿,使用起來(lái)有多么困難箱锐,也不應(yīng)該認(rèn)為是一個(gè)良好的框架。

? ? ? ? java持久層操作最原始的是基于JDBC的操作劳较,它提供了java程序與數(shù)據(jù)庫(kù)的連接驹止。JDBC的操作步驟大致如下:

? ? ? ? 一、使用Class.forName("Driver Name")裝載驅(qū)動(dòng)观蜗。

? ? ? ? 二臊恋、使用Connection con = DriverManager.getConnection(url, "username", "password");指

????????????????定數(shù)據(jù)庫(kù)連接地址、用戶(hù)名和密碼建立一個(gè)連接對(duì)象墓捻。

? ? ? ? 三抖仅、使用Statement stmt = con.createStatement();創(chuàng)建一個(gè)statement對(duì)象用來(lái)執(zhí)行sql。

? ? ? ? 四砖第、ResultSet rs = stmt.executeQuery("SELECT column FROM table")撤卢;使用statement

????????????????獲取結(jié)果集,并最終封裝成java對(duì)象梧兼。

這些操作步驟固定放吩,而且需要編寫(xiě)大量業(yè)務(wù)無(wú)關(guān)的代碼,才能夠獲取到數(shù)據(jù)羽杰。而且sql與java代碼耦合在一起渡紫,每次要對(duì)返回?cái)?shù)據(jù)做單獨(dú)的復(fù)雜處理到推。這樣在以后程序擴(kuò)展起來(lái)會(huì)變得非常麻煩,hibernate和mybatis就是用來(lái)解決這些問(wèn)題的惕澎,但是在處理問(wèn)題的思想上二者有著不同莉测,hibernate意在對(duì)持久化操作進(jìn)行一個(gè)完整的封裝,程序員可以通過(guò)java語(yǔ)言就可以操作數(shù)據(jù)庫(kù)集灌,而不必關(guān)注sql的實(shí)現(xiàn)。而mybatis則保留了sql自定義的功能复哆,僅對(duì)JDBC一些通用的步驟進(jìn)行了封裝欣喧。二者在持久層實(shí)現(xiàn)上各有千秋,但我認(rèn)為mybatis的這一做法在現(xiàn)階段是很符合實(shí)際的一些需求的梯找。

? ? ? ? 首先唆阿,hibernate的封裝過(guò)于嚴(yán)重,開(kāi)發(fā)人員完全不知道sql的具體實(shí)現(xiàn)锈锤,因此無(wú)法對(duì)于sql進(jìn)行優(yōu)化驯鳖。當(dāng)然,這也是hibernate設(shè)計(jì)的初衷——開(kāi)發(fā)人員無(wú)須關(guān)注sql的實(shí)現(xiàn)久免。但是對(duì)于一些復(fù)雜的需求浅辙,需要關(guān)聯(lián)多張表并且進(jìn)行復(fù)雜查詢(xún)的,hibernate就顯得力不從心了阎姥,有時(shí)候我們又不得不自定義一些本地sql去實(shí)現(xiàn)功能记舆。也許有反對(duì)者會(huì)說(shuō):那是hibernate的學(xué)習(xí)成本較高,而我們對(duì)于hibernate的了解又不夠深呼巴。但是一個(gè)成熟的技術(shù)是無(wú)須開(kāi)發(fā)人員進(jìn)行揣測(cè)的泽腮,如果hibernate有一些可行的解決方案,大可以在官網(wǎng)上進(jìn)行聲明衣赶。再說(shuō)诊赊,哪一個(gè)使用hibernate的大牛,在項(xiàng)目中沒(méi)有使用過(guò)本地sql呢府瞄?而且碧磅,既然hibernate的使用成本如此高、使用起來(lái)又如此復(fù)雜遵馆,顯然違背了框架設(shè)計(jì)的初衷续崖。說(shuō)一樣技術(shù)因?yàn)槭褂脧?fù)雜,所以用起來(lái)才能夠簡(jiǎn)單高效团搞,簡(jiǎn)直是不可思議严望!

? ? ? ? 其次,有時(shí)候一些需求并非需要某張表所有的字段逻恐,比如在做用戶(hù)登錄認(rèn)證的時(shí)候像吻,我們僅需要用戶(hù)名密碼即足夠了峻黍。但由于hibernate的完全對(duì)象映射,我們不得已要查詢(xún)出所有的字段拨匆。這就好像要去一個(gè)商店買(mǎi)東西姆涩,本來(lái)僅僅需要買(mǎi)一瓶飲料就好了,但卻不得已搬來(lái)了整個(gè)商店惭每!在單表操作骨饿,或者表關(guān)聯(lián)不是很多的情況下,還能夠接受台腥。但如果關(guān)聯(lián)的表很多宏赘,且表中的字段也非常多呢?這樣肯定很大程度上會(huì)影響性能的黎侈。

? ? ? ? 當(dāng)然察署,在業(yè)務(wù)簡(jiǎn)單,項(xiàng)目比較小時(shí)峻汉,hibernate還是具有明顯的優(yōu)勢(shì)的贴汪。而且,hibernate遇到的所有這些問(wèn)題休吠,都不應(yīng)該去進(jìn)行掩飾的扳埂,而是值得我們進(jìn)行思考的。就像我們期望出現(xiàn)一種計(jì)算機(jī)語(yǔ)言瘤礁,它更加接近人類(lèi)的語(yǔ)言聂喇,我們無(wú)需做更多的事就可以完成復(fù)雜的功能。這種想法可以當(dāng)做一種理想蔚携,如果要實(shí)現(xiàn)它則需要付出更多的心血去完成希太。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酝蜒,隨后出現(xiàn)的幾起案子誊辉,更是在濱河造成了極大的恐慌,老刑警劉巖亡脑,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堕澄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡霉咨,警方通過(guò)查閱死者的電腦和手機(jī)湃望,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)筝尾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)昧甘,“玉大人件豌,你說(shuō)我怎么就攤上這事∨缯” “怎么了唁毒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蒜茴,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我浆西,道長(zhǎng)粉私,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任近零,我火速辦了婚禮诺核,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘久信。我一直安慰自己窖杀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布入篮。 她就那樣靜靜地躺著陈瘦,像睡著了一般幌甘。 火紅的嫁衣襯著肌膚如雪潮售。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天锅风,我揣著相機(jī)與錄音酥诽,去河邊找鬼。 笑死皱埠,一個(gè)胖子當(dāng)著我的面吹牛肮帐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播边器,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼训枢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了忘巧?” 一聲冷哼從身側(cè)響起恒界,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砚嘴,沒(méi)想到半個(gè)月后十酣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡际长,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年耸采,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片工育。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虾宇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出如绸,到底是詐尸還是另有隱情文留,我是刑警寧澤好唯,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站燥翅,受9級(jí)特大地震影響骑篙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜森书,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一靶端、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凛膏,春花似錦杨名、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吁断,卻和暖如春趁蕊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仔役。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工掷伙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人又兵。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓任柜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沛厨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宙地,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容