mybatis @Insert annotation for Mysql and H2 - 需要一种方法来使用 Point for mysql and ST_Point for H2

mybatis @Insert annotation for Mysql and H2 - need a way to use Point for mysql and ST_Point for H2

我有一个由注释指定的 Mybatis 插入语句,我需要在基于数据库 H2 或 MySQL 的插入中有一个不同的查询 - 基本上:

INSERT POINT(#{lat}, #{lng}) INTO table 用于 mysql 和 INSERT ST_POINT(#{lat}, #{lng}) INTO table 用于 H2。

如何指定注释的数据库类型或如何(通常)使用注释配置完成此操作?

自3.5.5版本开始,MyBaits支持databaseId注解

对于以下示例,第一个 INSERT 将用于 H2,第二个将用于 MySQL,第三个将用于其他(SQL 语法可能是无效,但你明白了)。

public interface YourMapper {
  @Insert(value = "INSERT ST_POINT(#{lat}, #{lng}) INTO table", databaseId = "h2")
  @Insert(value = "INSERT POINT(#{lat}, #{lng}) INTO table", databaseId = "mysql")
  @Insert(value = "INSERT INTO table VALUES (POINT(#{lat}, #{lng}))")
  int insert(YourParameter param);
}

您可能还需要在配置中配置databaseIdProvider。

<databaseIdProvider type="DB_VENDOR">
  <property name="H2" value="h2"/>
  <property name="MySQL" value="mysql"/>
</databaseIdProvider>

mybatis-spring-boot-starter 的相同配置:

@Bean
VendorDatabaseIdProvider vendorDatabaseIdProvider() {
  VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
  Properties vendorProperties = new Properties();
  vendorProperties.put("H2", "h2");
  vendorProperties.put("MySQL", "mysql");
  databaseIdProvider.setProperties(vendorProperties);
  return databaseIdProvider;
}