溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mybatis是什么?Mybatis的前身又是什么?

發(fā)布時間:2020-05-12 14:07:00 來源:億速云 閱讀:1314 作者:Leah 欄目:編程語言

Mybatis是什么?Mybatis的前身又是什么?相信大部分人都不太了解,今天小編為了讓大家更加了解Mybatis,給大家總結(jié)了以下內(nèi)容,跟隨小編一起來看吧。

一、MyBatis的簡介

MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。

MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。

MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄.

二、MyBatis的歷史

原是apache的一個開源項目iBatis, 2010年6月這個項目由apache software foundation遷移到了google code,隨著開發(fā)團(tuán)隊轉(zhuǎn)投Google Code旗下,ibatis3.x正式更名為Mybatis ,代碼于2013年11月遷移到Github。

iBATIS一詞來源于“internet”和“abatis”的組合,是一個基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)

Mybatis是什么?Mybatis的前身又是什么?

三、MyBatis的基本說明

(1)、MyBatis是一個工作在持久層的框架,它不再是一個標(biāo)準(zhǔn)的ORM框架

我們先看看Hibernate是如何對數(shù)據(jù)庫進(jìn)行操作
Mybatis是什么?Mybatis的前身又是什么?

我們再來看看Mybatis如何對數(shù)據(jù)庫進(jìn)行操作

Mybatis是什么?Mybatis的前身又是什么?

因為它只管理了SQL語句和Java之間的關(guān)聯(lián)和映射,生成的實體類將不會自動創(chuàng)建表了,而是我們程序員自己去創(chuàng)建,你這邊寫的SQL語句是自己寫,而不是Hibernate通過save或者delete幫助我們進(jìn)行創(chuàng)建。

(2)、前身是ibatis, 在ibatis3.x 時,更名為 MyBatis
Mybatis是什么?Mybatis的前身又是什么?

所以說,在面試或者開發(fā)的時候會聽到IBatis,MyBatis,其實指的是一個東西。

(3)、MyBatis在java和sql之間提供更靈活的映射方案,MyBatis將sql語句和方法實現(xiàn),直接寫到xml文件中,實現(xiàn)和java程序解耦

為何這樣說,MyBatis將接口和SQL映射文件進(jìn)行分離,相互獨(dú)立,但又通過反射機(jī)制將其進(jìn)行動態(tài)綁定。

其實它底層就是Mapper代理工廠[MapperRegistry]和Mapper標(biāo)簽映射[MapperStatement],它們兩個說穿了就是Map容器,就是我們常見的HashMap、ConcurrentHashMap。

在后面我會具體分析MyBatis四大組件的工作原理。
Mybatis是什么?Mybatis的前身又是什么?

所以說,MyBatis使用面向接口的方式這種思想很好的實現(xiàn)了解耦和的方式,同時易于開發(fā)者進(jìn)行定制和擴(kuò)展,比如我們熟悉的通用Mapper和分頁插件pageHelper,方式也非常簡單,后面會詳細(xì)進(jìn)行說明。

(4)、 mybatis只負(fù)責(zé)sql, 建庫建表的工作由程序員完成

在使用Hibernate的時候,建表的工作也是由框架幫助我們完成,Hibernate本身就是一個全自動的框架,MyBatis是一個半自動的框架,建表在很多時候我們需要對數(shù)據(jù)類型和字段進(jìn)行更信詳細(xì)的定義和分析,所以說,在實際的生產(chǎn)環(huán)境中,MyBatis的這種方式更加符合開發(fā)者的習(xí)慣

小結(jié):Hibernate相對MyBatis的差異化和區(qū)別

(1).Hibernate是一個標(biāo)準(zhǔn)的ORM框架,MyBatis不再是一個標(biāo)準(zhǔn)的ORM框架,它工作在持久層

(2).Hibernate是一個全自動的框架,MyBatis是一個半自動的框架

(3).Hibernate將對數(shù)據(jù)庫的操作全封閉化,MyBatis將其透明化[SQL編寫]

(4).MyBatis相對Hibernate來說更加優(yōu)秀,更加流行

(5).Hibernate是一個重量級的框架,MyBatis相對來說更加輕量級,類似Struts2和SpringMVC

(6).Hibernate的學(xué)習(xí)成本更高,MyBatis相對來說更低

(7).從耦合度來說,MyBatis實現(xiàn)了最大程度化的解耦,通過面向接口的方式來進(jìn)行解決

MyBatis很好的借鑒了Hibernate的好的一面,那就是查詢后將數(shù)據(jù)結(jié)果集映射的封裝工作還是交給我來完成,編寫SQL由你自己去完成,處理復(fù)雜的自定義結(jié)果集映射的權(quán)利也交給你來做。

簡單的工作封裝交給我來做,所以說,這對于Hibernate來說是致命的,因為Hibenate將對表的操作轉(zhuǎn)換為對對象的操作,只需通過操作對象就能幫助我們發(fā)送SQL,這是它本身最大的特點優(yōu)勢。

但是,所有的操作都受限于讓Hibernate本身來完成,Hibernate最大的優(yōu)勢反而變成了劣勢,試想,一位優(yōu)秀的DBA,對原生的SQL進(jìn)行了優(yōu)化,但受限于Hibernate本身的特性,有種渾身無力使的感覺,這也注定Hibernate被MyBatis取代只是時間問題。

四、為什么要使用MyBatis?

MyBatis是一個半自動化的持久化層框架。

jdbc編程—當(dāng)我們使用jdbc持久化的時候,sql語句被硬編碼到j(luò)ava代碼中。這樣耦合度太高。代碼不易于維護(hù)。在實際項目開發(fā)中會經(jīng)常添加sql或者修改sql,這樣我們就只能到j(luò)ava代碼中去修改。

Hibernate和JPA

長難復(fù)雜SQL,對于Hibernate而言處理也不容易

內(nèi)部自動生產(chǎn)的SQL,不容易做特殊優(yōu)化。

基于全映射的全自動框架,javaBean存在大量字段時無法只映射部分字段。導(dǎo)致數(shù)據(jù)庫性能下降。
Mybatis是什么?Mybatis的前身又是什么?

對開發(fā)人員而言,核心sql還是需要自己優(yōu)化

sql和java編碼分開,功能邊界清晰,一個專注業(yè)務(wù)、一個專注數(shù)據(jù)。

可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO映射成數(shù)據(jù)庫中的記錄。成為業(yè)務(wù)代碼+底層數(shù)據(jù)庫的媒介

五、動態(tài)SQL映射

如果說MyBatis的SQL映射,接口和文件分離這種方式?jīng)Q定了MyBatis的優(yōu)勢,那么MyBatis的動態(tài)SQL直接決定了MyBatis它絕對的霸主地位,我們知道后端幾乎都是Spring家族的天下,那么它肯定想過使用自家的產(chǎn)品將MyBatis淘汰,它確實做過,但是沒有干掉MyBatis,所有MyBatis借助這兩大優(yōu)勢和特點,當(dāng)然MyBatis還有很多優(yōu)秀的地方,慢慢替代了Hibernate

在一個實際的項目中,sql語句往往是比較復(fù)雜的,為了滿足更加復(fù)雜的業(yè)務(wù)需求,MyBatis的設(shè)計者,提供了動態(tài)生成SQL的功能,動態(tài)SQL就是根據(jù)不同的情況在同一個業(yè)務(wù)邏輯里面產(chǎn)生的SQL語句是變化的,也就是說根據(jù)實際的業(yè)務(wù)需求同樣一段代碼產(chǎn)生SQL語句是不一樣的,。

在實際的開發(fā)中,我們會遇到比較復(fù)雜的業(yè)務(wù)需求,在這種復(fù)雜的業(yè)務(wù)需求中,我們可能需要發(fā)送好幾個SQL語句才能夠去處理的,那么如果我們可以對這個SQL語句進(jìn)行適當(dāng)?shù)木幊?那么這個SQL語句將會變得非常強(qiáng)大,那么比如說有些數(shù)據(jù)庫是支持存儲過程的,這個存儲過程其實就是直接使用SQL語句來進(jìn)行編程,可以根據(jù)你不同的情況動態(tài)的產(chǎn)生SQL語句

如果我們有相同的業(yè)務(wù)需求,在這個業(yè)務(wù)需求中有不同的情況,那我根據(jù)不同的情況在同一種請求里面產(chǎn)生的SQL語句也不一樣即解決了你要學(xué)習(xí)存儲過程的麻煩,而且存儲過程整合起來也很痛苦,同時還解決了可以靈活的適用復(fù)雜的業(yè)務(wù)需求,所以這也是MyBatis優(yōu)秀的原因,也是它為何能夠流行起來

MyBatis它研究了很多地方,讓程序更加靈活,它能夠設(shè)計一個產(chǎn)品,快速的簡潔的解決一些需求這才是最好的,這些其實他也能解決,寫一個存儲過程即可,但是存儲過程一些,代碼的復(fù)雜度又變高了

MyBatis就讓你在Mapper里面可以使用if,for循環(huán),多分支語句根據(jù)不同的情況產(chǎn)生不同的SQL語句,這就是MyBatis厲害的地方

所以MyBatis在一定程度上就有點把Hibernate就讓它有點受不了的地方,因為MyBatis業(yè)務(wù)需求設(shè)計的太好了,這也是目前SSM為何比SSH更流行的原因所以大家一看,好多年解決的問題,設(shè)計的問題別人都幫助我們進(jìn)行了解決,沒有理由不用它

哪怕現(xiàn)在流行的分布式和微服務(wù)架構(gòu),在持久層來說,很大程度上還是使用MyBatis來做持久層,雖然越來越多的項目都是基于SpringBoot,但持久層還是Mybatis用的非常多

Mybatis是什么?Mybatis的前身又是什么?
MyBatis為何在一定程度上它能夠讓大家喜歡,用它,就是他讓以前的工作變得更加簡單容易,而不是變得更難了,如果一樣?xùn)|西變得越來越難,那就沒人用它

但是隨著技術(shù)的發(fā)展,將來還會有更好的框架來替代MyBatis,這是肯定的,技術(shù)本身就是要不斷發(fā)展的,如果技術(shù)不再發(fā)展了,那么我們程序員的價值就會大大降低,因為不需要在學(xué)習(xí)了,幾次互聯(lián)網(wǎng)的高潮都是由于新技術(shù)的產(chǎn)生.導(dǎo)致程序員的薪水大幅度增長。

以上就是Mybatis的知識匯總,內(nèi)容較為全面,小編相信有部分知識點可能是我們?nèi)粘9ぷ骺赡軙姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI