我需要在使用Sybase DB的项目上编写一些测试。这些测试与运行一些SQL请求密切相关。为此,我们必须使用myBatis和DBunit方法与h2嵌入式DB。但问题是一些Sybase和h2对于相同的函数有一些不同的语法。
示例:
Sybase: CONVERT(data_type, expression [, format_style])
H2: CONVERT(value, data_type)
因此,您可以看到我是否会根据H2方言编写SQL语言测试将被传递,但是在Sybase上运行它的应用程序中的代码肯定会失败。
问题:
答案 0 :(得分:0)
1:仅当您实现一个名为CONVERT()的sql函数时才使用相同的参数。
2:一旦超越SELECT语法(然后仍然......)等基础知识,SQL方言会迅速变得非常不同。内置功能往往是特定于供应商的。 Slso,见上面的答案1,
答案 1 :(得分:0)
在更糟糕的情况下,您可以使用databaseIdProvider并为每个不同的数据库提供不同的SQL。
确保具备以下配置:
<databaseIdProvider type="DB_VENDOR">
<property name="HSQL Database Engine" value="hsql" />
<property name="Adaptive Server Enterprise" value="sybase"/>
</databaseIdProvider>
然后在mapper.xml中,您可以执行以下操作:
两者都可以使用:
<select id="select1" resultType="string" parameterType="int">
select
name from common where id=#{value}
</select>
仅由hsql使用:
<select id="select1" resultType="string" parameterType="int" databaseId="hsql">
...
</select>
仅供sybase使用
<select id="select1" resultType="string" parameterType="int" databaseId="sybase">
...
</select>