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