1、mybatis是什么?为什么要用mybatis?
對(duì)于初學(xué)者,如果進(jìn)行mybatis的學(xué)習(xí)呢?我總結(jié)了幾點(diǎn),會(huì)慢慢的更新出來。首先大家需要了解mybatis是什么、用mybatis來做什么、為什么要用mybatis、有什么優(yōu)缺點(diǎn);當(dāng)知道了為什么的時(shí)候就開始了解如何用的問題,如何使用mybatis、有幾種使用方式、各種方式的優(yōu)缺點(diǎn),在這個(gè)階段也會(huì)學(xué)習(xí)mybatis涉及到的一些標(biāo)簽的用法;當(dāng)知道了基礎(chǔ)用法之后,就開始接觸一些高級(jí)的用法,例如動(dòng)態(tài)sql的使用、mybatis的緩存使用等;至此,在實(shí)戰(zhàn)項(xiàng)目中使用mybatis進(jìn)行開發(fā)已經(jīng)沒有問題了。
接下來就開始深入的研究一下mybatis這個(gè)持久層的框架,在純技術(shù)的方面進(jìn)行研究,提高自己的能力。首先,大家需要了解一下mybatis的整體技術(shù)架構(gòu)和工作原理;接下來,就開始了解一下mybatis各大核心組件的具體功能及其工作原理。至此,算是對(duì)mybatis的原理簡單的了解一下了,由于博主的能力有限,因此對(duì)于mybatis的框架技術(shù)研究也就到這里算結(jié)束了。
最后會(huì)了解一些其他的東西,例如:mybatis的逆向工程使用、如何開發(fā)一個(gè)mybatis插件,在這里會(huì)介紹一下mybatis的分頁實(shí)現(xiàn)等。
至此,mybatis也算是入門了,出去就可以和別人說,你稍微了解mybatis框架,對(duì)其也多少有一點(diǎn)自己的理解和看法了。
目錄
1、mybatis是什么?
2、使用mybatis可以用來做什么?為什么要用mybatis?
1、mybatis是什么?
mybatis是一款用于持久層的、輕量級(jí)的半自動(dòng)化ORM框架,封裝了所有jdbc操作以及設(shè)置查詢參數(shù)和獲取結(jié)果集的操作,支持自定義sql、存儲(chǔ)過程和高級(jí)映射。
這句話大體是可以總結(jié)mybatis的,對(duì)于初學(xué)者來說,當(dāng)看到這句話時(shí)是否會(huì)有一些問題在你腦海中產(chǎn)生呢?是否有如下疑問:
持久層是什么?輕量級(jí)什么概念?ORM什么意思?jdbc是什么?高級(jí)映射又是哪些映射?
接下來,一個(gè)個(gè)的解決這些問題。
持久層是什么意思呢,可以把層字去掉,持久,也就是”保持長久“的意思,他針對(duì)的是系統(tǒng)中數(shù)據(jù)存在的時(shí)限,而非其他。有一個(gè)基本問題大家應(yīng)該知道,在內(nèi)存中的數(shù)據(jù)是不持久的,如果計(jì)算機(jī)崩潰或者其他原因?qū)е玛P(guān)機(jī),數(shù)據(jù)就會(huì)丟失,但是磁盤上的數(shù)據(jù)是持久的,因此,用在持久層也就是這個(gè)框架是用來將內(nèi)存中的數(shù)據(jù)寫入到磁盤中的,再具體一點(diǎn),就是寫到數(shù)據(jù)庫中。所以,總結(jié)一下,框架用于持久層,就是說這個(gè)框架是和數(shù)據(jù)庫進(jìn)行交互的,用于數(shù)據(jù)庫中數(shù)據(jù)操作的框架。
輕量級(jí)框架的概念可以簡單的理解為所用框架開發(fā)的程序啟動(dòng)時(shí)占用的資源少、對(duì)業(yè)務(wù)代碼的侵入性不強(qiáng)、比較容易配置、使用和部署簡單、獨(dú)立部署即可使用無需依賴另外的框架,這種就是輕量級(jí)框架,相反的就是重量級(jí)。在互聯(lián)網(wǎng)飛速發(fā)展和產(chǎn)品迭代更新速度如此之快的今天,輕量級(jí)的框架更容易被接受,這也是spring勝出,EJB退出的原因。
ORM,Object Relational Mapping, 直接翻譯就是對(duì)象關(guān)系映射,我也沒有更好的解釋,看一下百科上是這樣介紹的”用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說,它其實(shí)是創(chuàng)建了一個(gè)可在編程語言里使用的“虛擬對(duì)象數(shù)據(jù)庫”。面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。為了解決這個(gè)不匹配的現(xiàn)象,對(duì)象關(guān)系映射技術(shù)應(yīng)運(yùn)而生”。這里簡單的可以這樣理解,java中的數(shù)據(jù)類和數(shù)據(jù)庫之間的類型系統(tǒng)不同,因此在使用java處理數(shù)據(jù)庫時(shí),需要進(jìn)行對(duì)應(yīng)的類型轉(zhuǎn)化,而mybatis可以做這個(gè)事,可以將java中的類型一一映射到數(shù)據(jù)庫的字段類型上,因此可以將其看作是一個(gè)ORM框架。那為什么又是半自動(dòng)ORM框架呢?使用mybatis,需要手動(dòng)配置pojo、sql和映射關(guān)系,用戶可以自定義sql,這些sql是針對(duì)于處理數(shù)據(jù)庫的,但是這些sql需要接受一些查詢java類型的參數(shù),或者是返回結(jié)果集封裝到j(luò)ava類中,這些是需要配置的,因此mybatis是一個(gè)半自動(dòng)ORM框架。說到底還是因?yàn)樾枰獙憇ql,才能將數(shù)據(jù)庫中的數(shù)據(jù)映射到j(luò)ava類中,而不是直接根據(jù)java類獲取到對(duì)應(yīng)數(shù)據(jù)庫中數(shù)據(jù)。這里多說一下,hibernate是一個(gè)全自動(dòng)的ORM框架,因?yàn)橹恍枰峁﹑ojo和映射關(guān)系即可,后期可以直接根據(jù)pojo獲取到數(shù)據(jù)。
最后就是高級(jí)映射是什么,這里可以類比數(shù)據(jù)表之間的映射關(guān)系,也就是一對(duì)一、一對(duì)多、多對(duì)多。
2、使用mybatis可以用來做什么?為什么要用mybatis?
通過上邊對(duì)mybatis的介紹,mybatis可以做什么,想必心里有點(diǎn)底了,mybatis主要用于j2ee企業(yè)級(jí)應(yīng)用開發(fā)的持久層,用于處理java程序與數(shù)據(jù)庫之間的交互。
在j2ee企業(yè)級(jí)應(yīng)用開發(fā)中,其實(shí)并不只有mybatis,還有hibernate、ebean、jpa等其他持久層解決方案可以選擇,那么為什么要選擇使用mybatis呢?其實(shí)這個(gè)問題答案并不固定,因?yàn)?#xff0c;你也可以不用mybatis呀,這里就要多說一句了,互聯(lián)網(wǎng)技術(shù)里邊,除了真正存在bug的,其余的每一個(gè)技術(shù)都有存在的價(jià)值,畢竟存在即合理,之前不是有人說:“不選貴的,只選對(duì)的”,其實(shí)在技術(shù)選擇上也是這個(gè)道理,適合的才是最好的,在真正應(yīng)用開發(fā)時(shí),并不是用最新的技術(shù)就是最好的,要根據(jù)自己將要開發(fā)的應(yīng)用的特點(diǎn)、成本等多個(gè)方面進(jìn)行考量到底使用什么技術(shù)。
言歸正傳,那么哪種項(xiàng)目更加適合選擇使用mybatis呢?這里拿hibernate來比較一下,因?yàn)榧兘榻Bmybatis的有特點(diǎn)可能感覺不出什么,hibernate和mybatis是使用最多的兩個(gè)持久層框架,比較一下選擇時(shí)可能會(huì)更清晰,接下來將在對(duì)ORM的支持、靈活性、開發(fā)效率、適用場景四個(gè)方面進(jìn)行闡述。
hibernate是全ORM框架,mybatis是半ORM框架,需要自己寫sql,其實(shí)這就是這個(gè)問題的根源,正因?yàn)樘匦圆灰粯?#xff0c;因此就自然而然的導(dǎo)致了其他地方不一樣。因?yàn)閔ibernate是全ORM框架,因此在映射規(guī)則確定的情況下只需要操作對(duì)應(yīng)的java數(shù)據(jù)模型即可,因此用起來開發(fā)效率是高的(因?yàn)椴恍枰詣?dòng)維護(hù)一堆sql呀,只需要直接調(diào)用內(nèi)置的方法即可),也正因?yàn)檫@樣,映射規(guī)則的確定是復(fù)雜的,前期對(duì)象之間關(guān)系固定后,后期是不容易改變的,而轉(zhuǎn)言mybatis,因?yàn)槭前隣RM框架,sql是自己寫的,對(duì)應(yīng)的映射規(guī)則也是相應(yīng)維護(hù)的,因此后期如果數(shù)據(jù)模型和之間的關(guān)系改變了,mybatis改變起來更加簡單;也正因?yàn)樯鲜龅?#xff0c;mybatis也更加靈活,正因?yàn)閟ql可以自己開發(fā),因此在優(yōu)化sql上更容易實(shí)現(xiàn),而hibernate就不見得了;不過在開發(fā)效率上,在適合自己的領(lǐng)域,hibernate框架肯定是開發(fā)效率更勝一籌。
通過上邊說到的,其實(shí)最本質(zhì)的核心也就一個(gè),mybatis可以自己寫sql,因此靈活性更高,因此在開發(fā)一些業(yè)務(wù)經(jīng)常調(diào)整的項(xiàng)目時(shí)可以使用,例如:電商,而hibernate則更加適合于一些業(yè)務(wù)模式固化的項(xiàng)目,例如:OA。
總結(jié)
以上是生活随笔為你收集整理的1、mybatis是什么?为什么要用mybatis?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于SSM+JBPM的智能化OA办公平台
- 下一篇: 2、mybatis的基本使用