最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

需求

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

mybatis-plus版本:3.3.2

實現(xiàn)方法

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

尷尬的是,mybatis-plus源碼是gradle項目,目前沒學(xué)習(xí)過,結(jié)果改好了源碼不會打包…

在項目中重寫同包同類名的要修改的mybatis-plus源碼中的類,在項目啟動中,會優(yōu)先加載項目里的代碼而不是jar包里的(適合本地,只覆蓋,不改變源代碼)

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

因為暫未接觸gradle打包,所以本文介紹了方法2、方法3

法2實現(xiàn)

因為要重寫類,所以記得引入原mybatis-plus的jar包依賴

目錄如圖

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

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

新增一個方言實現(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());

在這里插入圖片描述

合計需要修改的類有JdbcUtils、DialectRegistry、DbType,同時新增一個方言類GBase8sDialect。

20210423 修改完善

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

解決方案如下:

  • 具體解決措施:重寫攔截器類PaginationInterceptor(com.baomidou.mybatisplus.extension.plugins),因為沒搞懂其參數(shù)添加源碼,所以直接用了個笨辦法,修改參數(shù)位置
  • 在intercept方法中把參數(shù)List中最后兩個參數(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ù)庫情況下,例切換到Oracle,會因為最后兩個參數(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)境上可以使用成功,但是當部署在Linux服務(wù)器上時,可能還是直接引用了mybatis-plus源代碼,沒有使用到編譯后的覆蓋內(nèi)容,導(dǎo)致不支持gbase8s.完善內(nèi)容原理如下:

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

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

相關(guān)文章

  • Shiro與Springboot整合開發(fā)的基本步驟過程詳解

    Shiro與Springboot整合開發(fā)的基本步驟過程詳解

    這篇文章主要介紹了Shiro與Springboot整合開發(fā)的基本步驟,本文結(jié)合實例代碼給大家介紹整合過程,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • JAVA最容易忽視的數(shù)據(jù)類型之枚舉詳解

    JAVA最容易忽視的數(shù)據(jù)類型之枚舉詳解

    這篇文章主要給大家介紹了關(guān)于JAVA最容易忽視的數(shù)據(jù)類型之枚舉的相關(guān)資料,Java中的枚舉類型是一種特殊的類型,它允許程序員定義一個固定的值集合,并為每個值分配一個名稱,枚舉類型提供了一種簡單、安全和可讀性強的方式來表示一組相關(guān)的常量,需要的朋友可以參考下
    2023-10-10
  • 一文搞懂接口參數(shù)簽名與驗簽(附含java python php版)

    一文搞懂接口參數(shù)簽名與驗簽(附含java python php版)

    這篇文章主要為大家介紹了java python php不同版的接口參數(shù)簽名與驗簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)的問題(附github源碼)

    Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)的問題(附github源碼)

    這篇文章主要介紹了Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)(附github源碼),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Spring中集成Groovy的四種方式(小結(jié))

    Spring中集成Groovy的四種方式(小結(jié))

    這篇文章主要介紹了Spring中集成Groovy的四種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java常見問題之javac Hello.java找不到文件的解決方法

    Java常見問題之javac Hello.java找不到文件的解決方法

    剛開始編寫java代碼時,肯定會遇到各種各樣的bug,當然對于初學(xué)者這也是能理解的,下面這篇文章主要給大家介紹了關(guān)于Java常見問題之javac Hello.java找不到文件解決的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下。
    2018-01-01
  • MyBatis實現(xiàn)萬能Map和模糊查詢

    MyBatis實現(xiàn)萬能Map和模糊查詢

    本文主要介紹了MyBatis實現(xiàn)萬能Map和模糊查詢,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Mybatis環(huán)境搭建及文件配置過程解析

    Mybatis環(huán)境搭建及文件配置過程解析

    這篇文章主要介紹了Mybatis環(huán)境搭建及文件配置過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • eclipse中自動生成構(gòu)造函數(shù)的兩種方法

    eclipse中自動生成構(gòu)造函數(shù)的兩種方法

    下面小編就為大家?guī)硪黄猠clipse中自動生成構(gòu)造函數(shù)的兩種方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • springboot通過SchedulingConfigurer實現(xiàn)多定時任務(wù)注冊及動態(tài)修改執(zhí)行周期(示例詳解)

    springboot通過SchedulingConfigurer實現(xiàn)多定時任務(wù)注冊及動態(tài)修改執(zhí)行周期(示例詳解)

    這篇文章主要介紹了springboot通過SchedulingConfigurer實現(xiàn)多定時任務(wù)注冊及動態(tài)修改執(zhí)行周期,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06

最新評論

灵宝市| 永和县| 措勤县| 栾川县| 武穴市| 巫山县| 西华县| 芦溪县| 保德县| 青海省| 陆丰市| 安图县| 元朗区| 贵港市| 樟树市| 台北市| 南澳县| 洮南市| 陈巴尔虎旗| 吉木萨尔县| 资阳市| 莆田市| 咸阳市| 武汉市| 浮山县| 孟州市| 桐庐县| 华亭县| 清水县| 新郑市| 托克逊县| 上饶市| 海兴县| 黎平县| 抚顺市| 柳州市| 琼中| 全椒县| 株洲市| 宜宾市| 阜康市|