MybatisPlus實(shí)戰(zhàn)專題 多表查詢 代碼生成 分組查詢 一網(wǎng)打盡

一命咐、MybatisPlusMax簡(jiǎn)介

MybatisPlusMax是MybatisPlus的增強(qiáng)包景殷,秉承只拓展不修改的理念隙赁,對(duì)MybatisPlus做增強(qiáng)仇祭。

正如MybatisPlus是對(duì)MyBatis的增強(qiáng)披蕉,MybatisPlusMax是對(duì)MybatisPlus的增強(qiáng),拓展理念一脈相承乌奇。

MybatisPlus依然進(jìn)入軟件成熟期没讲,對(duì)其進(jìn)行微小的修改會(huì)慎之又慎,向其提交修改PR周期較長(zhǎng)礁苗,基于此考慮食零,為了更好的使用MybatisPlus,作者決定拓展第三方功能包寂屏。

當(dāng)MybatisPlusMax代碼逐步成熟后贰谣,作者愿意一次性捐獻(xiàn)給MybatisPlus官方團(tuán)隊(duì),以方便用戶更好的使用MybatisPlus迁霎。

二吱抚、與MybatisPlus的淵源

(一)MyBatis粉

早期的作者也是MyBatis粉,如果你是從拼接SQL時(shí)代過來的考廉,受夠了在Java代碼中拼接SQL字符串秘豹,那么MyBatis絕對(duì)讓你愛不釋手。

隨著MyBatis的重度使用昌粤,也暴露出一些問題:訪問數(shù)據(jù)庫(kù)極其啰嗦既绕,單表CURD兜兜轉(zhuǎn)轉(zhuǎn)需要寫一大堆代碼,每個(gè)項(xiàng)目有很多張表涮坐,每個(gè)開發(fā)會(huì)做很多項(xiàng)目凄贩,此時(shí)的MyBatis從開發(fā)端來講需要完善。

(二)MybatisPlus初版

MybatisPlus敏銳的發(fā)現(xiàn)MyBatis的痛點(diǎn)袱讹,著手對(duì)MyBatis重復(fù)業(yè)務(wù)代碼進(jìn)行封裝疲扎,于是便形成了早期版本MybatisPlus。

早期的MyBatisPlus字段名等魔法值充斥著Java代碼里,并且為了構(gòu)建查詢條件椒丧,需要編寫及其啰嗦的代碼壹甥,很多MyBatis使用者對(duì)此嗤之以鼻。被噴的原因如下:大量的字段名魔法值充斥在Java代碼里壶熏,與早期的拼接SQL字符串有何區(qū)別句柠;非常簡(jiǎn)單的查詢條件,在XML文件中很容易完成棒假,使用MybatisPlus構(gòu)造查詢條件啰啰嗦嗦溯职,不知所云。

早期的MybatisPlus為了改進(jìn)MyBatis的使用的想法是好的淆衷,可是在落地實(shí)踐過程中帶來了更大的問題缸榄,因此處于不溫不火的狀態(tài)。

(三)MybatisPlus新生

Java 8帶來了Lambda表達(dá)式祝拯,為MybatisPlus重構(gòu)代碼帶來了新的基礎(chǔ)能力甚带。MybatisPlus基于Java 8新特性進(jìn)行代碼重構(gòu),為其帶來了新生佳头,使用Lambda語(yǔ)法鹰贵,干掉了Java代碼里的字段名等魔法值,此時(shí)的MybatisPlus真正展示出吸引力康嘉。

作者粉的是Lambda表達(dá)式版本的MybatisPlus碉输,不管是查詢條件的構(gòu)建,還是字段的選取亭珍,均使用Lambda表達(dá)式(方法引用)來完成敷钾,Java代碼變得清爽。

方法引用性能

使用方法引用來替換字段名肄梨,是否會(huì)產(chǎn)生性能問題呢阻荒?會(huì)也不會(huì)。會(huì)是因?yàn)榻?jīng)過一層包裝众羡,性能確實(shí)有損耗侨赡,不會(huì)是因?yàn)镸ybatisPlus在使用反射的地方使用了緩存,有效的解決了中間過程耗時(shí)操作粱侣,因此可以認(rèn)為L(zhǎng)ambda版的MybatisPlus的性能略有下降羊壹。用略微下降一點(diǎn)性能的代價(jià)置換開發(fā)的靈活性,這一點(diǎn)是值得的齐婴。

況且現(xiàn)代服務(wù)器硬件逐年提高油猫,從系統(tǒng)總體而言考慮,利大于弊尔店。

基于方法引用實(shí)現(xiàn)編碼眨攘,在遇到代碼重構(gòu)是有多爽就不用多說了主慰。小步快跑嚣州、敏捷開發(fā)等鲫售,造成的屎山代碼不勝枚舉,代碼重構(gòu)的地位變得愈發(fā)重要该肴。

三情竹、作者的努力

作者是MybatisPlus粉,因此在系統(tǒng)組件選擇態(tài)度更為積極匀哄。

(一)零SQL函數(shù)式編程時(shí)代

在Lambda表達(dá)式加持下的MybatisPlus秦效,零SQL函數(shù)式編程成為了可能。零SQL是只盡量少顯示的編寫SQL語(yǔ)句涎嚼,能不寫就不寫阱州,對(duì)于疑難雜癥,退回使用MyBatis XML更為方便法梯,此時(shí)也不能一條道走到黑苔货。

(二)MybatisPlusMax

MybatisPlusMax不是新內(nèi)容新,是從common包中抽離出來的代碼立哑,方便用戶更好的使用和解藕夜惭。

1、DAO緩存

給DAO層透明化的增加緩存铛绰,能夠極大的提高接口的響應(yīng)效率诈茧,透明化意味著不知不覺間具備了緩存的能力,業(yè)務(wù)代碼零感知捂掰。這里使用的是Redis分布式緩存敢会,Redis是繼Mysql之后必備的組件,因此默認(rèn)緩存使用Redis分布式緩存这嚣。

有關(guān)DAO更多內(nèi)容鸥昏,請(qǐng)查看視頻教程增強(qiáng)MybatisPlus!一行代碼整合Redis分布式緩存疤苹!

2互广、自增自減零SQL編程

通過自定義CustomLambdaUpdateWrapper包裝器,實(shí)現(xiàn)零SQL編程卧土。

public boolean updateUserAge(Long userId) {
    CustomLambdaUpdateWrapper<User> wrapper = new CustomLambdaUpdateWrapper<>();
    wrapper.incr(User::getAge, 1).eq(User::getUserId, userId);
    return update(wrapper);
}

視頻教程自增自減

3惫皱、復(fù)雜業(yè)務(wù)報(bào)表

通過封裝WrapperUtils工具類,實(shí)現(xiàn)andor 交替出現(xiàn)時(shí)復(fù)雜業(yè)務(wù)報(bào)表查詢尤莺。具體使用場(chǎng)景舉例:

((industry = ?) OR (industry = ?)) AND ((round = ?) OR (round = ?) OR (round = ?))

MybatisPlus·業(yè)務(wù)報(bào)表·復(fù)雜SQL

(三)多表連接查詢

在我們使用Lambda風(fēng)格搞定單表查詢之后旅敷,因業(yè)務(wù)需要,多表連接查詢必不可少颤霎!為此作者在此方面也做了不少努力媳谁,既然選擇零SQL編程涂滴,那么便堅(jiān)持到底。

在這里需要說明幾點(diǎn)晴音,有不少聲音認(rèn)為柔纵,單表使用MybatisPlus,多表使用MyBatis锤躁,有這種想法的朋友可以更近一步搁料,不然便是自欺欺人,掛著MybatisPlus之名干MyBatis之實(shí)系羞。

實(shí)際上郭计,MyBatis使用join來完成連表查詢,本身是有性能缺陷的椒振,數(shù)據(jù)庫(kù)數(shù)據(jù)量膨脹越來越快昭伸,join連表查詢的弊端愈發(fā)明顯∨煊《阿里巴巴開發(fā)者手冊(cè)》明令禁止使用join查詢庐杨,你還在堅(jiān)持什么呢?

以Lambda版MybatisPlus單表查詢?yōu)榛A(chǔ)嗡善,通過Java內(nèi)存拼裝辑莫,完成多表連接查詢是全新的選擇。視頻教程如下:

(四)零SQL分組查詢

分組查詢由于涉及到新增字段罩引,因此普通的單表查詢并不合適各吨,不滿足DO與數(shù)據(jù)庫(kù)表結(jié)構(gòu)一一對(duì)應(yīng)的關(guān)系。作者通過對(duì)MybatisPlus源代碼的閱讀袁铐,找到了依然能夠像單表查詢的形式處理分組查詢揭蜒。

視頻教程

(五)MybatisPlus代碼生成器

只要你想偷懶,那么Java代碼生成器便是偷懶的利器剔桨,Java代碼生成器以MybatisPlus為基礎(chǔ)屉更,通過在全局yml文件中復(fù)用數(shù)據(jù)庫(kù),讀取數(shù)據(jù)庫(kù)元數(shù)據(jù)信息洒缀,一件生成domain瑰谜、mapper、service树绩、controller等Spring MVC風(fēng)格代碼萨脑,以單表查詢?yōu)橹鳎骖櫠啾磉B接查詢饺饭,是你的開發(fā)好幫手渤早。

文字教程MybatisPlus代碼生成器

視頻教程

四、后記

作者叫賽泰先生瘫俊,主要技術(shù)分享平臺(tái)在B站鹊杖,是一位MybatisPlus粉悴灵,基于MybatisPlus做實(shí)戰(zhàn)技術(shù)分享,希望能對(duì)喜歡MybatisPlus的你有所幫助骂蓖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末积瞒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涯竟,更是在濱河造成了極大的恐慌赡鲜,老刑警劉巖空厌,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庐船,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嘲更,警方通過查閱死者的電腦和手機(jī)筐钟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赋朦,“玉大人篓冲,你說我怎么就攤上這事〕韬澹” “怎么了壹将?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)毛嫉。 經(jīng)常有香客問我诽俯,道長(zhǎng),這世上最難降的妖魔是什么承粤? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任暴区,我火速辦了婚禮,結(jié)果婚禮上辛臊,老公的妹妹穿的比我還像新娘仙粱。我一直安慰自己,他們只是感情好彻舰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布伐割。 她就那樣靜靜地躺著,像睡著了一般刃唤。 火紅的嫁衣襯著肌膚如雪隔心。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天透揣,我揣著相機(jī)與錄音济炎,去河邊找鬼。 笑死辐真,一個(gè)胖子當(dāng)著我的面吹牛须尚,可吹牛的內(nèi)容都是我干的崖堤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼耐床,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼密幔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撩轰,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤胯甩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后堪嫂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偎箫,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年皆串,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淹办。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恶复,死狀恐怖怜森,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谤牡,我是刑警寧澤副硅,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站翅萤,受9級(jí)特大地震影響恐疲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜断序,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一流纹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧违诗,春花似錦漱凝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至阵苇,卻和暖如春壁公,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绅项。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工紊册, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人快耿。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓囊陡,卻偏偏與公主長(zhǎng)得像芳绩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撞反,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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