中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SpringBoot+Mybatis-Plus的集成與使用方法

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Spring Boot + Mybatis-Plus的集成與使用方法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

青陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

一、自動(dòng)注入SQL原理 

通過上一章節(jié),我們可以很方便的使用繼承了BaseMapper接口的SysLogMapper進(jìn)行CRUD操作。下面我們先來看下傳統(tǒng)MaBatis的特點(diǎn):

Spring Boot + Mybatis-Plus的集成與使用方法

MyBatis-Plus官方介紹MyBatis-Plus是一個(gè)MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增強(qiáng)不做改變。只為簡化開發(fā)、提高效率。學(xué)習(xí)到這里,更直觀的使用體驗(yàn)如下:

  • 基于MyBatis

    1. 需要編寫XXMapper接口,并手動(dòng)編寫CRUD方法

    2. XXMapper.xml映射文件,并手動(dòng)編寫每個(gè)方法對(duì)應(yīng)的SQL語句

  • 基于MyBatis-Plus

    1. 只需要?jiǎng)?chuàng)建XXMapper接口并繼承BaseMapper接口,即可完成所有通用CRUD操作

    2. 可以無需創(chuàng)建SQL映射文件

只要繼承BaseMapper,就可完成所有通用CRUD操作。那么我們就來了解下BaseMapper接口。查看BaseMapper源碼,可以看到接口里定義了各種CRUD操作的17種方法,可以極其方便的實(shí)現(xiàn)單一、批量、分頁等操作。

Spring Boot + Mybatis-Plus的集成與使用方法

這里看到CRUD方法都在這里定義好了,那么最終執(zhí)行操作數(shù)據(jù)庫的SQL語句是在哪編寫的呢。帶著這個(gè)疑惑,我先從使用源頭SysLogMapper接口開始分析。這接口只繼承了BaseMapper接口的定義的所有方法。

那這些方法又是如何實(shí)現(xiàn)的呢。

這里我們先要知道動(dòng)態(tài)代理的這個(gè)概念。在Spring中動(dòng)態(tài)代理實(shí)現(xiàn)有兩種:一種基于JDK使用接口代理,另一種是基于cglib的使用類繼承方式動(dòng)態(tài)代理。有關(guān)動(dòng)態(tài)代理原理這里不作深入講解,有興趣的同伴可以查閱資料了解,后續(xù)我們也會(huì)單獨(dú)對(duì)這塊進(jìn)行講解學(xué)習(xí)。

我們選擇debug模式,打個(gè)斷點(diǎn)執(zhí)行查詢操作。

Spring Boot + Mybatis-Plus的集成與使用方法

可以看到sysLogMpper被動(dòng)態(tài)代理后,在對(duì)象結(jié)構(gòu)里可以看selSessionFactory對(duì)象以及對(duì)象里的configuration對(duì)象。configuration對(duì)象就是MyBatis-Plus全局配置對(duì)象,包含所有配置信息。configuration對(duì)象中有mappedStatements屬性,這里就是sysLogMpper接口方法的SQL語句映射,mappedStatements是一個(gè)HashMap,key為方法名,value對(duì)應(yīng)一個(gè)個(gè)MappedStatement對(duì)象。

Spring Boot + Mybatis-Plus的集成與使用方法

我們點(diǎn)開一個(gè)鍵值對(duì)看下,在MappedStatement對(duì)象里有DynamicSqlSource類對(duì)象sqlSource,在對(duì)象中就編寫了CRUD操作方法的動(dòng)態(tài)SQL語句。

Spring Boot + Mybatis-Plus的集成與使用方法

那么這些動(dòng)態(tài)的SQL是如何放進(jìn)MappedStatement對(duì)象中的呢。在官網(wǎng)文檔中提到了SQL注入器,默認(rèn)為DefaultSqlInjector。我們打開這個(gè)類看下

public class DefaultSqlInjector extends AbstractSqlInjector {
    public DefaultSqlInjector() {
    }
 
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        return (List)Stream.of(new Insert(), new Delete(), new DeleteByMap(), new DeleteById(), new DeleteBatchByIds(), new Update(), new UpdateById(), new SelectById(), new SelectBatchByIds(), new SelectByMap(), new SelectOne(), new SelectCount(), new SelectMaps(), new SelectMapsPage(), new SelectObjs(), new SelectList(), new SelectPage()).collect(Collectors.toList());
    }
}

這個(gè)類繼承AbstractSqlInjector,重寫了getMethodList方法,返回一個(gè)集合。集合里是實(shí)例化后的CRUD執(zhí)行的方法類對(duì)象。我們打開Insert類看下,這個(gè)類繼承自AbstractMethod類,重寫了injectMappedStatement方法。

public class Insert extends AbstractMethod {
    public Insert() {
    }
 
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        KeyGenerator keyGenerator = new NoKeyGenerator();
        SqlMethod sqlMethod = SqlMethod.INSERT_ONE;
        String columnScript = SqlScriptUtils.convertTrim(tableInfo.getAllInsertSqlColumnMaybeIf(), "(", ")", (String)null, ",");
        String valuesScript = SqlScriptUtils.convertTrim(tableInfo.getAllInsertSqlPropertyMaybeIf((String)null), "(", ")", (String)null, ",");
        String keyProperty = null;
        String keyColumn = null;
        if (StringUtils.isNotEmpty(tableInfo.getKeyProperty())) {
            if (tableInfo.getIdType() == IdType.AUTO) {
                keyGenerator = new Jdbc3KeyGenerator();
                keyProperty = tableInfo.getKeyProperty();
                keyColumn = tableInfo.getKeyColumn();
            } else if (null != tableInfo.getKeySequence()) {
                keyGenerator = TableInfoHelper.genKeyGenerator(tableInfo, this.builderAssistant, sqlMethod.getMethod(), this.languageDriver);
                keyProperty = tableInfo.getKeyProperty();
                keyColumn = tableInfo.getKeyColumn();
            }
        }
        //格式SQL語句
        String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), columnScript, valuesScript);
        SqlSource sqlSource = this.languageDriver.createSqlSource(this.configuration, sql, modelClass);
        return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource, (KeyGenerator)keyGenerator, keyProperty, keyColumn);
    }
}

injectMappedStatement方法里,可以看傳了三個(gè)參數(shù)mapperClass、 modelClass、 tableInfo,分別為要操作的mapper接口對(duì)象、實(shí)體類對(duì)象、以及實(shí)體映射的表信息對(duì)象。在方法里將這里信息按insert操作格式化出sql字符串,最后一行調(diào)用繼承的addInsertMappedStatement方法將以上這對(duì)象信息進(jìn)行封裝,最終返回MappedStatement對(duì)象。

以上就是我們對(duì)MyBatis-Plus自動(dòng)注入SQL原理進(jìn)行簡單的分析,有興趣的同學(xué)可以再深入研究,歡迎留言與我們一起探討。

二、 條件構(gòu)造器

在前面介紹BaseMapper接口中定義的方法中,我們發(fā)現(xiàn)有方法參數(shù)中傳了Wrapper對(duì)象。這就是我們接下來要講解的條件構(gòu)造器。在開始講解如何使用條件構(gòu)造器前,先了解下什么是條件構(gòu)造器,磨刀不誤砍柴工!

Spring Boot + Mybatis-Plus的集成與使用方法

從上面圖解中可以清楚看到各接口、抽象類與實(shí)現(xiàn)類間的實(shí)現(xiàn)與繼承關(guān)系。之所以給出上面圖解,是因?yàn)榻酉聛韺⒁攸c(diǎn)講解使用QueryWrapper、LambdaQueryWrapper、UpdateWrapper、LambdaUpdateWrapper四個(gè)查詢與更新包裝器,主要用于處理 sql 拼接,排序,實(shí)體參數(shù)進(jìn)行分頁查詢與更新,簡單便捷,沒有額外的負(fù)擔(dān),能夠有效的提高開發(fā)效率。

可以看到對(duì)象查詢,這里字義了兩個(gè)類,QueryWrapperLambdaQueryWrapper。兩個(gè)類的區(qū)別是QueryWrapper中條件參數(shù)使用的是數(shù)據(jù)庫字段,不是Java屬性。LambdaQueryWrapper看類名就知道是支持使用JDK8新特性,使用方法引用來進(jìn)行查詢。

通用的條件參數(shù)有以下這些:

查詢方式說明
setSqlSelect設(shè)置 SELECT 查詢字段
whereWHERE 語句,拼接 + WHERE 條件
andAND 語句,拼接 + AND 字段=值
andNewAND 語句,拼接 + AND (字段=值)
orOR 語句,拼接 + OR 字段=值
orNewOR 語句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 內(nèi)容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查詢 LIKE
notLike模糊查詢 NOT LIKE
inIN 查詢
notInNOT IN 查詢
isNullNULL 值查詢
isNotNullIS NOT NULL
groupBy分組 GROUP BY
havingHAVING 關(guān)鍵詞
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 條件語句
notExistsNOT EXISTS 條件語句
betweenBETWEEN 條件語句
notBetweenNOT BETWEEN 條件語句
addFilter自由拼接 SQL
last拼接在最后,例如:last("LIMIT 1")

三 、小結(jié)

MyBatis-Plus自動(dòng)注入SQL原理以及簡單了解什么是條件構(gòu)造器。一起學(xué)習(xí)的同伴們應(yīng)該對(duì)MyBatis-Plus的條件構(gòu)造器使用已經(jīng)躍躍欲試了。

上述就是小編為大家分享的Spring Boot + Mybatis-Plus的集成與使用方法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:SpringBoot+Mybatis-Plus的集成與使用方法
文章出自:http://www.rwnh.cn/article40/jipjeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站營銷、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
察雅县| 顺昌县| 宜川县| 革吉县| 曲水县| 蒙自县| 长岭县| 盐山县| 南京市| 清新县| 桓仁| 常宁市| 巴东县| 北宁市| 达日县| 七台河市| 丹江口市| 社会| 蒲江县| 河西区| 台东市| 江阴市| 和田县| 吉木乃县| 富民县| 五寨县| 佳木斯市| 墨竹工卡县| 仙游县| 沂源县| 游戏| 灌云县| 肥西县| 巨鹿县| 若羌县| 阿拉善右旗| 肥东县| 沈阳市| 蓬溪县| 昂仁县| 长丰县|