Java 在使用Mybatis和不同的DB进行集成测试和开发时,如何进行集成测试

Java 在使用Mybatis和不同的DB进行集成测试和开发时,如何进行集成测试,java,mysql,integration-testing,h2,mybatis,Java,Mysql,Integration Testing,H2,Mybatis,我正在使用MyBatis开发我的应用程序。现在我偶然发现了一种情况,sql查询应该向我返回最后插入的id 我使用MySql进行开发,使用H2DB进行集成测试 在MySql中,我们使用last_insert_id函数来获取这个id,但在H2 DB中,我们使用currval函数。即使我在MySql中使用sequence,这种语法也会有所不同 现在的问题是我应该如何编写集成测试代码。因为我为开发编写的同一个查询用于集成测试。在这种情况下我应该做什么您可以使用动态SQL,基于数据库类型或其他可用变量,例

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

我使用MySql进行开发,使用H2DB进行集成测试

在MySql中,我们使用last_insert_id函数来获取这个id,但在H2 DB中,我们使用currval函数。即使我在MySql中使用sequence,这种语法也会有所不同


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

您可以使用动态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>

请参阅。

您可以根据数据库类型或其他可用变量(例如具有当前配置文件的环境变量)使用动态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>

请参阅。

如果您使用的是Spring boot,您可以尝试将以下属性放入test application.properties文件中。只有一行:

spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL

关键字是MODE=MySQL,它适用于我。

如果您使用的是Spring boot,您可以尝试将以下属性放入test application.properties文件中。只有一行:

spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL

关键字是MODE=MySQL,它适合我。

last\u insert\u id似乎是一个MySQL函数,而不是Oracle。很抱歉,我使用的是MySQL,不是Oracle DB。我不知道,因为我没有配置Dbeaverlast\u insert\u id似乎是一个MySQL函数,而不是Oracle。很抱歉,我使用的是MySQL而不是Oracle DB。我不知道,因为我没有配置Dbeaveri,所以我认为应该对数据库无关的代码进行集成测试。我们的代码应该适用于这两个数据库。我认为集成测试应该在数据库无关的代码上进行。我们的代码应该适用于这两个数据库。