本文介绍了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的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!