一命咐、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)and
和or
交替出現(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)存拼裝辑莫,完成多表連接查詢是全新的選擇。視頻教程如下:
- MybatisPlus多表連接查詢
- MybatisPlus多表連接查詢合集說明
- MybatisPlus多表連接查詢一對(duì)一單條記錄查詢
- MybatisPlus多表連接查詢一對(duì)一查詢列表數(shù)據(jù)
- MybatisPlus多表連接查詢一對(duì)一分頁(yè)查詢數(shù)據(jù)
- MybatisPlus多表連接查詢一對(duì)多查詢列表數(shù)據(jù)
- MybatisPlus多表連接查詢一對(duì)多分頁(yè)查詢數(shù)據(jù)
- MybatisPlus多表連接查詢結(jié)語(yǔ)總結(jié)
- 用代碼生成器自動(dòng)化實(shí)現(xiàn)MybatisPlus多表連接查詢
- MybatisPlus多表連接查詢過濾敏感字段屬性
- MyBatis多表連接查詢開啟二級(jí)緩存臟數(shù)據(jù)案例分析
- MybatisPlus多表連接查詢之二級(jí)緩存
(四)零SQL分組查詢
分組查詢由于涉及到新增字段罩引,因此普通的單表查詢并不合適各吨,不滿足DO
與數(shù)據(jù)庫(kù)表結(jié)構(gòu)一一對(duì)應(yīng)的關(guān)系。作者通過對(duì)MybatisPlus源代碼的閱讀袁铐,找到了依然能夠像單表查詢的形式處理分組查詢揭蜒。
視頻教程
- MybatisPlus Lambda表達(dá)式 聚合查詢 分組查詢 lambdaQuery groupby
- MybatisPlus Lambda分組查詢 優(yōu)雅高效統(tǒng)計(jì)部門人數(shù)
- MybatisPlus Lambda表達(dá)式 聚合查詢 分組查詢 COUNT SUM AVG MIN MAX
(五)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的你有所幫助骂蓖。