Skip to content

xbatis 支持的数据库类型

现已支持的数据库类型,如下表格所示,以下均进行了testcase测试,放心使用

数据库ID描述
mysqlMYSQLMySQL 数据库
mariadbMARIA_DB
oracleORACLEOracle数据库
db2DB2DB2 数据库
H2H2H2 数据库
postgresPGSQLPostgreSQL 数据库
sqlserverSQL_SERVERSQLServer 数据库
dmDM达梦数据库
kingbaseKING_BASE人大金仓据库
clickhouseCLICK_HOUSEclickhouse数据库(特性不支持)
sqliteSQLITEsqlite数据库
COBARCOBARCOBAR数据库
OCEANBASEOCEAN_BASEOCEANBASE数据库
HIGHGOHIGHGO瀚高数据库

数据库 ID 用于yml里配置

Oracle 12c以下版本数据库怎么配置?

启动时,设置分页处理器(处理器由官网提供)

java
XbatisGlobalConfig.setPagingProcessor(DbType.ORACLE, new OracleRowNumPagingProcessor());

SQLServer 2012以下版本数据库怎么配置?

启动时,设置分页处理器(处理器由官网提供)

java
XbatisGlobalConfig.setPagingProcessor(DbType.SQL_SERVER, new SQLServerRowNumberOverPagingProcessor());

其他数据如何支持

目前其他数据基本都是扩展MYSQL/PostgreSQL数据库居多;这样的话 可以通过自定义数据解析器返回同类型的DbType;原理就是根据jdbcUrl识别是那种数据库

方式1:数据库解析器 DbTypeParser

假如 xxx数据库是基于PostgreSQL扩展的

java
public class MyDbTypeParser extends DefaultDbTypeParser {

    //注意 jdbcUrl 是全小写的
    protected DbType getDbType(String jdbcUrl){
        DbType dbType = super.getDbType(jdbcUrl);
        if(dbType!=null){
            return dbType;
        }
        //此处识别xxx数据库
        if (jdbcUrl.contains(":xxx:")) {
            return DbType.PGSQL;
        }
        return null;
    }
}

方式1:设置数据库解析器 DbTypeParser (大功告成)

java
@Configuration
public class XbatisConfig {

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return (configuration) -> {
            XbatisGlobalConfig.setDbTypeParser(new MyDbTypeParser());
        };
    }

}

方式2: 自定义DbType

java
public enum MyDbType implements IDbType {

    LIKE_MYSQL(Name.LIKE_MYSQL, new KeywordWrap("`", "`"), DbModel.MYSQL, ":mysql:"),

    LIKE_PGSQL(Name.LIKE_PGSQL, new KeywordWrap("\"", "\""), DbModel.PGSQL, ":postgresql:"),

    LIKE_ORACLE(Name.LIKE_ORACLE, new KeywordWrap("\"", "\"", true), DbModel.ORACLE, ":oracle:"),

    ;

    //数据库类型名字
    private final String name;
    //数据库关键字环绕
    private final KeywordWrap keywordWrap;
    //数据库关键字集合
    private final Set<String> keywords = new HashSet<>();
    //数据库模式,用于那些基于某些原数据库扩展的延伸数据库
    private final DbModel dbModel;
    //jdbc url 匹配串,必须全小写
    private final String[] jdbcUrlMatchers;

    MyDbType(String name, KeywordWrap keywordWrap, DbModel dbModel, String... jdbcUrlMatchers) {
        this.name = name;
        this.keywordWrap = keywordWrap;
        this.dbModel = dbModel;
        this.jdbcUrlMatchers = jdbcUrlMatchers;
    }

    @Override
    public KeywordWrap getKeywordWrap() {
        return keywordWrap;
    }

    @Override
    public Set<String> getKeywords() {
        return keywords;
    }

    /**
     * 官方提供的添加关键字的方法
     *
     * @param keywords
     * @return 添加是否成功
     */
    @SafeVarargs
    public final void addKeyword(String... keywords) {
        IDbType.super.addKeyword(keywords);
    }

    @Override
    public DbModel getDbModel() {
        return this.dbModel;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String[] getJdbcUrlMatchers() {
        return this.jdbcUrlMatchers;
    }

    public static final class Name {

        public static final String LIKE_MYSQL = "LIKE_MYSQL";

        public static final String LIKE_PGSQL = "LIKE_PGSQL";

        public static final String LIKE_ORACLE = "LIKE_ORACLE";

        private Name() {
        }
    }
}

方式2: 注册自定义DbType

java
@Configuration
public class XbatisConfig {

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return (configuration) -> {
            //注册自己的MyDbType
            DbTypes.register(MyDbType.class);
            //如果追加关键词设置,必须在注册后
            DbTypes.addKeyword("value3");
        };
    }
}

数据库特殊关键词 特殊关键词/保留关键词/关键字/关键词 设置

java
@Configuration
public class XbatisConfig {

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return (configuration) -> {
            //推荐:针对指定的数据库设置特殊保留关键词
            DbType.MYSQL.addKeyword("key1","key2");
            //全部数据都设置
            DbTypes.addKeyword("key1","key2");
        };
    }
}