本文介绍了Mybatis@Insert Annotation for MySQL和H2-需要一种使用Point for MySQL和ST_Point for H2的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

推荐答案

从3.5.5版开始,MyBaits支持批注中的databaseId

在下面的示例中,第一个INSERT将用于H2,第二个INSERT将用于MySQL,第三个INSERT将用于其他对象(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);
}

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

<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;
}

这篇关于Mybatis@Insert Annotation for MySQL和H2-需要一种使用Point for MySQL和ST_Point for H2的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 08:58