pagehelper适配国产数据库
目录
pagehelper适配国产数据库
一.国产数据库介绍
国产数据库基本上都是山寨版的数据库,例如人大金仓数据库,山寨postgresql数据库,有些则山寨mysql、oracle等数据库。所以在适配过程中,只要了解到使用的国产数据库是山寨的那一种数据库,则遇到的问题就迎刃而解。
一.分页插件源码分析
分页插件在未指定方言的情况下,会通过数据库的URL取其数据库类型做自动方言匹配。如下图:
分页插件数据库方言自动匹配源码如下:
静态块会在类加载时,注册数据库方言的分页处理类。注册的别名则与上图数据库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”属性,可自动匹配数据库。