1. 程式人生 > >SqlHelper釋出——比你期望的還要多的多(例如比MyBatis-Pagehelper效能更高)

SqlHelper釋出——比你期望的還要多的多(例如比MyBatis-Pagehelper效能更高)

SqlHelper釋出——比Mybatis-PageHelper效能更高

起源

前段時間開啟了一個新的專案,在選擇分頁外掛時,發現github上很流行的一個是pagehelper,在百度上搜索了一下,使用量。由於專案緊急,所先拿來用了。但是我知道它並不適合我們。原因是它有如下幾個缺點:

1) 對國產資料庫支援不足

2) 擴充套件不方便

3) 配置複雜

4) 效能底下 (不要噴我, 因為它不是用的佔位符?,發揮不了PrepareSatement的優勢)

5) 只支援MyBatis

 

鑑於它的這些不足,我就趁閒暇時間新開發了一款解決上述缺點的分頁工具,它已經在公司裡的兩個專案得到了驗證。但它不僅僅是個分頁工具那麼簡單,目前支援的特性有Pagination、UrlParser,未來會支援更多特性。

 

關鍵特性

  1. 支援MyBatis, JFinal,Ebean
  2. 支援 90+ 種資料庫, 支援列表參見 here. 包含了幾乎所有的國產資料庫:
    • TiDB (北京平凱星辰科技))
    • Doris (Apache Doris,百度研發)
    • MaxCompute (阿里巴巴)
    • K-DB (浪潮)
    • GBase (南大通用)
    • DM (達夢)
    • OSCAR (神州通用)
    • HighGo (瀚高)
    • KingBase (金倉)
    • OpenBase (東軟)
    • SequoiaDB (巨杉)

                   如果你想知道所有的資料庫排名的話,你可以在這裡找到: DB Engines.

  1. 同一個應用中支援多種資料庫
  2. 不需要配置dialect,可以自動的獲取。
  3. 比 Mybatis-PageHelper效能更高, 原因是limit , offset等引數使用 PrepareStatement placeholder '?' , Mybatis是硬編碼拼接的
  4. 通過Java SPI的方式支援了外掛
  5. 支援 spring boot 1.x , 2.x
  6. 支援 mybatis 3.x
  7. 支援 JDK6+

 

Vs Pagehelper

metric

mybatis-pagehelper

sqlhelper

databases

13

90+

multiple databases in runtime

auto detect dialect

plugin

PrepareStatement with '?'

X

mybatis

3.x

3.x

spring boot

1.x, 2.x

1.x, 2.x

JDK

1.6+

1.6+

jFinal

X

國產資料庫

X

√ (參見上述列表)

 

 

安裝

可以在多種場景下使用,支援MyBatis,JFinal,EBean等。先就說說MyBatis下如何使用:

 

1)  與Mybatis + SpringBoot結合使用

此應用環境下,只需匯入下列包即可:

    <dependency>
        <groupId>com.github.fangjinuo.sqlhelper</groupId>
        <artifactId>sqlhelper-mybatis-spring-boot-autoconfigure</artifactId>
        <version>${sqlhelper.version}</version>
    </dependency>
    <dependency>
        <groupId>com.github.fangjinuo.sqlhelper</groupId>
        <artifactId>sqlhelper-mybatis-spring-boot-starter</artifactId>
        <version>${sqlhelper.version}</version>
    </dependency>

 

 

2)與MyBatis (無spring boot)結合使用

此應用環境下,使用也不麻煩。

第一步,匯入依賴:

    <dependency>
        <groupId>com.github.fangjinuo.sqlhelper</groupId>
        <artifactId>sqlhelper-dialect</artifactId>
        <version>${sqlhelper.version}</version>
    </dependency>

 

 

第二步:配置外掛:

   <configuration>
        ...
        <databaseIdProvider type="DB_VENDOR">
          <property name="SQL Server" value="sqlserver"/>
          <property name="DB2" value="db2"/>
          <property name="Oracle" value="oracle" />
        </databaseIdProvider>
        ...
        <settings>
            ...
            <setting name="defaultScriptingLanguage" value="com.github.fangjinuo.sqlhelper.mybatis.plugins.pagination.CustomScriptLanguageDriver" />
            ...
        </settings>
        ...
    </configuration>
    
    <plugins>
      <plugin interceptor="com.github.fangjinuo.sqlhelper.mybatis.plugins.pagination.MybatisPaginationPlugin" />
    </plugins>

 

 

使用

    @GetMapping
    public PagingResult list(){
        User queryCondtion = new User();
        queryCondtion.setAge(10);
        PagingRequest request = new PagingRequest()
                .setPageNo(1)
                .setPageSize(10);
        PagingRequestContextHolder.getContext().setPagingRequest(request);
        List users = userDao.selectByLimit(queryCondtion);
        request.getResult().setItems(users);
        return request.getResult();
    }

 

 

 

 

從mybatis-pagehelper遷移

為了相容已有的應用,特意提供了從mybatis-pagehelper遷移工具。使用也很簡單,把mybatis-pagehelper.jar移除,匯入下面的包即可。

    <dependency>
        <groupId>com.github.fangjinuo.sqlhelper</groupId>
        <artifactId>sqlhelper-mybatis-over-pagehelper</artifactId>
        <version>${sqlhelper.version}</version>
    </dependency>

 

 

支援

https://github.com/fangjinuo/sqlhelper

&n