方言
不同的数据库,对SQL的支持大相径庭,因此Jimmer采用方言配置来适配不同的数据库。
设置方言
-
如果使用Jimmer提供的Spring Boot Starter,有两种用法
-
配置
application.yml
或application.properties
jimmer:
dialect: org.babyfish.jimmer.sql.dialect.MySqlDialect -
提供全局的方言Bean
- Java
- Kotlin
@Bean
public Dialect dialect() {
return new MySqlDialect();
}@Bean
fun dialect(): Dialect =
MySqlDialect()
信息如果同时采用以上两种方法 (不推荐),则第二种方法优先
-
-
如果不使用Jimmer提供的Spring Boot Starter
- Java
- Kotlin
JSqlClient sqlClient = JSqlClient
.newBuilder()
.setDialect(new MySqlDialect())
...省略其他配置...
.build();val sqlClient = newKSqlClient {
setDialect(MySqlDialect())
...省略其他配置...
}
方言列表
-
org.babyfish.jimmer.sql.dialect.DefaultDialect
这是未指定方言配置时,Jimmer所采用的默认方言,因此,无需显式指定。
-
org.babyfish.jimmer.sql.dialect.H2Dialect
-
org.babyfish.jimmer.sql.dialect.MySqlDialect
-
org.babyfish.jimmer.sql.dialect.PostgresDialect
-
org.babyfish.jimmer.sql.dialect.OracleDialect
-
org.babyfish.jimmer.sql.dialect.TiDBDialect
因 为TiDB是一个分布式数据库,无法支持外键约束,因此,真外键不被此方言支持。请参见真假外键
除此之外,
TiDBDialect
和MySqlDialect
没有任何差异。 -
至于其他数据库,用户可以自行扩展方言。但需要数据库支持多列
in
表达式,比如where (a, b) in ((3, 4), (8, 13))
或
where (a, b) in (select x, y from ...)
备注目前,多列
in
表达式是Jimmer高度依赖的特性,而Microsoft Sql Server暂不支持此特性。因此,目前暂时不支持Microsoft Sql Server。