java - 使用Mybatis和不同DB进行集成测试和开发时如何进行集成测试

标签 java mysql integration-testing h2 mybatis

我正在使用 MyBatis 来开发我的应用程序。现在我偶然发现了一种情况,sql 查询应该返回最后插入的 id 给我,

我使用 MySql 进行开发,使用 H2 DB 进行集成测试。

在MySql中我们使用last_insert_id()函数来获取这个id,但在H2 DB中我们使用currval()函数。即使我在 MySql 中使用序列,这个语法仍然会有所不同。

现在的问题是我该如何编写集成测试代码。由于我为开发编写的相同查询用于集成测试。在这种情况下我应该做什么

最佳答案

您可以根据数据库类型或可用的其他变量(例如具有当前配置文件的环境变量)使用动态 SQL。 文档中的示例:

<insert id="insert">
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    <if test="_databaseId == 'oracle'">
      select seq_users.nextval from dual
    </if>
    <if test="_databaseId == 'db2'">
      select nextval for seq_users from sysibm.sysdummy1"
    </if>
  </selectKey>
  insert into users values (#{id}, #{name})
</insert>

请参阅documentation here .

关于java - 使用Mybatis和不同DB进行集成测试和开发时如何进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018566/

相关文章:

ios - 如何使用 Typhoon 为集成测试注入(inject)假的、 stub 的或模拟的依赖项

java - 为什么 Integer.class.isInstance(i) 返回 true,而 int.class.isInstance(i) 和 Integer.TYPE.isInstance(i) 返回 false?

java - 读取 zip 文件内目录内的 zip 条目

java - 使用 PEM 编码的加密私钥对消息进行本地签名

mysql - 使用 WHERE AND 的多参数化 SQL 语法无效

ruby-on-rails - 在 Rspec Rails 3 中使用特性规范嵌套场景

unit-testing - 当参数具有grailsparametermap属性时,如何测试验证错误?

java - 当 ServletContextListener#contextInitialized() 失败时该怎么办

mysql - 重用现有产品 ID 作为主键

php - MYSQL 查询仅在不是特定日期时进行分组