pagehelper适配国产数据库

一.国产数据库介绍

        国产数据库基本上都是山寨版的数据库,例如人大金仓数据库,山寨postgresql数据库,有些则山寨mysql、oracle等数据库。所以在适配过程中,只要了解到使用的国产数据库是山寨的那一种数据库,则遇到的问题就迎刃而解。

一.分页插件源码分析

分页插件在未指定方言的情况下,会通过数据库的URL取其数据库类型做自动方言匹配。如下图: 

b0289506182442338a789e20fdac6a27.png

分页插件数据库方言自动匹配源码如下:

静态块会在类加载时,注册数据库方言的分页处理类。注册的别名则与上图数据库url红框圈中部分匹配(配置文件未设置方言时)。

public class PageAutoDialect {

    private static Map<String, Class<? extends Dialect>> dialectAliasMap = new HashMap<String, Class<? extends Dialect>>();

    public static void registerDialectAlias(String alias, Class<? extends Dialect> dialectClass){
        dialectAliasMap.put(alias, dialectClass);
    }

    static {
        //注册别名
        registerDialectAlias("hsqldb", HsqldbDialect.class);
        registerDialectAlias("h2", HsqldbDialect.class);
        registerDialectAlias("postgresql", HsqldbDialect.class);
        registerDialectAlias("phoenix", HsqldbDialect.class);

        registerDialectAlias("mysql", MySqlDialect.class);
        registerDialectAlias("mariadb", MySqlDialect.class);
        registerDialectAlias("sqlite", MySqlDialect.class);

        registerDialectAlias("oracle", OracleDialect.class);
        registerDialectAlias("db2", Db2Dialect.class);
        registerDialectAlias("informix", InformixDialect.class);
        //解决 informix-sqli #129,仍然保留上面的
        registerDialectAlias("informix-sqli", InformixDialect.class);

        registerDialectAlias("sqlserver", SqlServerDialect.class);
        registerDialectAlias("sqlserver2012", SqlServer2012Dialect.class);

        registerDialectAlias("derby", SqlServer2012Dialect.class);
        //达梦数据库,https://github.com/mybatis-book/book/issues/43
        registerDialectAlias("dm", OracleDialect.class);
    }

三.解决方案

从注册的数据中可看出,人大金仓数据库并未注册,所以需要我们手动添加。以下为我的代码处理,由于人大金仓数据库为postgresql的山寨版,按照以上代码中postgresql的注册代码“

registerDialectAlias("postgresql", HsqldbDialect.class);

”,将key值改为人大金仓,在springboot的config配置中,注册一下即可


@Configuration
public class MybatisDialectConfig {

    @Bean
    public void MyBatisDialectBean()
    {
        PageAutoDialect.registerDialectAlias("kingbase8", HsqldbDialect.class);
    }

}

注释掉配置文件中分页插件配置的“helperDialect”属性,可自动匹配数据库。

        6b6a7b8d0a6d492496c1a69668a0aec0.png

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值