xbatis 支持的数据库类型
现已支持的数据库类型,如下表格所示,以下均进行了testcase测试,放心使用
| 数据库 | ID | 描述 |
|---|---|---|
| mysql | MYSQL | MySQL 数据库 |
| mariadb | MARIA_DB | |
| oracle | ORACLE | Oracle数据库 |
| db2 | DB2 | DB2 数据库 |
| H2 | H2 | H2 数据库 |
| postgres | PGSQL | PostgreSQL 数据库 |
| sqlserver | SQL_SERVER | SQLServer 数据库 |
| dm | DM | 达梦数据库 |
| kingbase | KING_BASE | 人大金仓据库 |
| clickhouse | CLICK_HOUSE | clickhouse数据库(特性不支持) |
| sqlite | SQLITE | sqlite数据库 |
| COBAR | COBAR | COBAR数据库 |
| OCEANBASE | OCEAN_BASE | OCEANBASE数据库 |
| HIGHGO | HIGHGO | 瀚高数据库 |
数据库 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");
};
}
}