欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus支持Gbase8s分頁(yè)的實(shí)現(xiàn)示例

 更新時(shí)間:2021年11月09日 10:26:43   作者:楓雨血痕  
本文主要介紹了Mybatis-plus支持Gbase8s分頁(yè)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

需求

實(shí)現(xiàn)mybatis-plus對(duì)gbase8s的分頁(yè)效果支持,使切換數(shù)據(jù)庫(kù)(如oracle/mysql/gbase8s)時(shí)同樣分頁(yè)插件代碼一樣實(shí)現(xiàn)分頁(yè)效果。

mybatis-plus版本:3.3.2

實(shí)現(xiàn)方法

修改Mybatis-plus源代碼,重新打jar包,引用其作為項(xiàng)目依賴。

尷尬的是,mybatis-plus源碼是gradle項(xiàng)目,目前沒(méi)學(xué)習(xí)過(guò),結(jié)果改好了源碼不會(huì)打包…

在項(xiàng)目中重寫同包同類名的要修改的mybatis-plus源碼中的類,在項(xiàng)目啟動(dòng)中,會(huì)優(yōu)先加載項(xiàng)目里的代碼而不是jar包里的(適合本地,只覆蓋,不改變?cè)创a)

在項(xiàng)目中重寫同包同類名的要修改的mybatis-plus源碼中的類,編譯后替換解壓的源代碼中的class文件,再重新打回jar包(適合本地/Linux服務(wù)器,修改了源代碼jar包)

因?yàn)闀何唇佑|gradle打包,所以本文介紹了方法2、方法3

法2實(shí)現(xiàn)

因?yàn)橐貙戭?,所以記得引入原mybatis-plus的jar包依賴

目錄如圖

重寫結(jié)構(gòu)

修改JdbcUtils,在url判斷中增加gbase8s判斷

 else if (jdbcUrl.contains(":gbasedbt-sqli:")){
            return DbType.GBASE8S;
        }

在這里插入圖片描述

在DbType類中增加對(duì)應(yīng)值

/**
 * GBase8s
 */
GBASE8S("gbase8s", "南大通用數(shù)據(jù)庫(kù)"),

在這里插入圖片描述

新增一個(gè)方言實(shí)現(xiàn)類GBase8sDialect

public class GBase8sDialect implements IDialect {

    @Override
    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
        Integer index = originalSql.toLowerCase().indexOf("select");
        StringBuilder sql = new StringBuilder(originalSql);
        sql.insert(index+6," skip " + FIRST_MARK + " first " + SECOND_MARK + " ");
        return new DialectModel(sql.toString(), offset, limit).setConsumerChain();
    }


}

在DialectRegistry中增加

dialect_enum_map.put(DbType.GBASE8S, new GBase8sDialect());

在這里插入圖片描述

合計(jì)需要修改的類有JdbcUtils、DialectRegistry、DbType,同時(shí)新增一個(gè)方言類GBase8sDialect。

20210423 修改完善

上述情況有一個(gè)小bug:就是當(dāng)該分頁(yè)查詢有多于2個(gè)參數(shù)(即不止分頁(yè)參數(shù))時(shí),因?yàn)閙p默認(rèn)分頁(yè)參數(shù)動(dòng)態(tài)SQL參數(shù)匹配時(shí)在最后面,而Gbase8s的分頁(yè)參數(shù)是最前面兩個(gè),所以出現(xiàn)參數(shù)位置匹配不正確的問(wèn)題!當(dāng)然,如果僅有兩個(gè)分頁(yè)參數(shù)則不影響

解決方案如下:

  • 具體解決措施:重寫攔截器類PaginationInterceptor(com.baomidou.mybatisplus.extension.plugins),因?yàn)闆](méi)搞懂其參數(shù)添加源碼,所以直接用了個(gè)笨辦法,修改參數(shù)位置
  • 在intercept方法中把參數(shù)List中最后兩個(gè)參數(shù)放置到最前面:在model.consumers(mappings, configuration, additionalParameters);后加以下代碼(大約在213行)
	mappings.add(0,mappings.get(mappings.size()-2));
	mappings.add(0,mappings.get(mappings.size()-1));
	mappings.remove(mappings.size()-1);
	mappings.remove(mappings.size()-1);

20210519完善

之前的情況完全適用于Gbase8s,但如果考慮多數(shù)據(jù)庫(kù)情況下,例切換到Oracle,會(huì)因?yàn)樽詈髢蓚€(gè)參數(shù)位置改變導(dǎo)致參數(shù)有誤,所以再次完善,把之前0423增加的代碼改為如下:

if(dbType.equals(DbType.GBASE8S)){
            mappings.add(0,mappings.get(mappings.size()-1));
            mappings.add(0,mappings.get(mappings.size()-2));
            mappings.remove(mappings.size()-1);
            mappings.remove(mappings.size()-1);
        }

20210528完善

之前的代碼在IDEA等本地開發(fā)環(huán)境上可以使用成功,但是當(dāng)部署在Linux服務(wù)器上時(shí),可能還是直接引用了mybatis-plus源代碼,沒(méi)有使用到編譯后的覆蓋內(nèi)容,導(dǎo)致不支持gbase8s.完善內(nèi)容原理如下:

  • 正常使用maven打包工具,項(xiàng)目打包后會(huì)有之前加入的覆蓋代碼編譯后的各種class文件
  • 把mybatis-plus(以下簡(jiǎn)稱mp)的原jar包解壓(實(shí)際上只有兩個(gè)要改:mybatis-plus-extension-3.3.2.jar和mybatis-plus-annotation-3.3.2.jar),然后把第一步中編譯的覆蓋內(nèi)容class文件覆蓋到解壓后的源代碼同路徑下(重復(fù)的替換,新增的增加)
  • 把替換后的源代碼重新打成jar包
    • //進(jìn)入到源代碼目錄下,打開命令窗口,使用命令jar cvf xxx.jar *,會(huì)在當(dāng)前目錄下生成新的xxxjar包
    • 例:重新打mybatis-plus-extension-3.3.2.jar包
    • 進(jìn)入解壓后的mybatis-plus-extension-3.3.2目錄(該目錄下有com和META-INF文件夾),cmd打開命令窗口(路徑為當(dāng)前目錄路徑),使用命令jar cvf mybatis-plus-extension-3.3.2.jar *,會(huì)在當(dāng)前目錄下生成一個(gè)mybatis-plus-extension-3.3.2.jar包,把這個(gè)jar包替換maven庫(kù)中的同名jar包即可!另一個(gè)jar包同理
  • 因?yàn)橹苯犹鎿Q了源代碼jar包,所以可以直接引用,同時(shí)可以把之前再項(xiàng)目例加的覆蓋內(nèi)容去了

到此這篇關(guān)于Mybatis-plus支持Gbase8s分頁(yè)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mybatis-plus Gbase8s分頁(yè) 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java獲取某一日期的前N天(使用Calendar類)

    Java獲取某一日期的前N天(使用Calendar類)

    這篇文章主要給大家介紹了關(guān)于Java如何使用Calendar類獲取某一日期的前N天,我們可以使用Java中的Calendar類來(lái)獲取前n天的時(shí)間,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • Java中為什么不同的返回類型不算方法重載

    Java中為什么不同的返回類型不算方法重載

    這篇文章主要介紹了Java中為什么不同的返回類型不算方法重載,方法重載是指在同一個(gè)類中,定義了多個(gè)同名方法,但每個(gè)方法的參數(shù)類型或者是參數(shù)個(gè)數(shù)不同就是方法重載,下文詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • MyBatis分頁(yè)插件PageHelper的具體使用

    MyBatis分頁(yè)插件PageHelper的具體使用

    這篇文章主要介紹了MyBatis分頁(yè)插件PageHelper的具體使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • SpringBoot全局配置long轉(zhuǎn)String丟失精度問(wèn)題解決方案

    SpringBoot全局配置long轉(zhuǎn)String丟失精度問(wèn)題解決方案

    這篇文章主要介紹了SpringBoot全局配置long轉(zhuǎn)String丟失精度問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java開發(fā)SpringBoot集成接口文檔實(shí)現(xiàn)示例

    Java開發(fā)SpringBoot集成接口文檔實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Java開發(fā)SpringBoot如何集成接口文檔的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Spring Cloud Feign原理詳解

    Spring Cloud Feign原理詳解

    Feign 主要是幫助我們方便進(jìn)行rest api服務(wù)間的調(diào)用,本文從Spring Cloud對(duì)feign封裝的源碼中去了解其主要實(shí)現(xiàn)機(jī)制
    2021-06-06
  • 淺談Spring中Bean的作用域、生命周期

    淺談Spring中Bean的作用域、生命周期

    這篇文章主要介紹了淺談Spring中Bean的作用域、生命周期,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java中的volatile關(guān)鍵字原理深入解析

    Java中的volatile關(guān)鍵字原理深入解析

    這篇文章主要介紹了Java中的volatile關(guān)鍵字原理深入解析,volatile是Java 編程語(yǔ)言允許線程訪問(wèn)共享變量,為了確保共享變量能被準(zhǔn)確和一致地更新,線程應(yīng)該確保通過(guò)排他鎖單獨(dú)獲得這個(gè)變量,需要的朋友可以參考下
    2023-12-12
  • Java算法比賽常用方法實(shí)例總結(jié)

    Java算法比賽常用方法實(shí)例總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java算法比賽常用方法實(shí)例總結(jié)的相關(guān)資料,文中給出了詳細(xì)的實(shí)例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)java算法具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java使用黑盒方式模擬實(shí)現(xiàn)內(nèi)網(wǎng)穿透

    Java使用黑盒方式模擬實(shí)現(xiàn)內(nèi)網(wǎng)穿透

    這篇文章主要介紹了Java使用黑盒方式模擬實(shí)現(xiàn)內(nèi)網(wǎng)穿透,內(nèi)網(wǎng)穿透,也即 NAT 穿透,進(jìn)行 NAT 穿透是為了使具有某一個(gè)特定源 IP 地址和源端口號(hào)的數(shù)據(jù)包不被 NAT 設(shè)備屏蔽而正確路由到內(nèi)網(wǎng)主機(jī),需要的朋友可以參考下
    2023-05-05

最新評(píng)論