我正在使用mybatis开发我的应用程序。现在我偶然发现了一种情况,sql查询应该将最后插入的id返回给我,我使用mysql进行开发,使用h2db进行集成测试。在mysql中,我们使用last_insert_id()函数来获取此id,但在h2 db中,我们使用currval()函数。即使我在mysql中使用sequence,这种语法也会有所不同。现在的问题是我应该如何编写集成测试代码。因为我为开发编写的查询也用于集成测试。在这种情况下我该怎么办
q5lcpyga1#
如果您使用的是spring boot,那么可以尝试将以下属性放入test application.properties文件中。只有一行:
spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL
关键字是mode=mysql,它适合我。
lndjwyie2#
您可以基于数据库类型或其他可用变量(例如,具有当前概要文件的环境变量)使用动态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>
请参阅此处的文档。
2条答案
按热度按时间q5lcpyga1#
如果您使用的是spring boot,那么可以尝试将以下属性放入test application.properties文件中。只有一行:
关键字是mode=mysql,它适合我。
lndjwyie2#
您可以基于数据库类型或其他可用变量(例如,具有当前概要文件的环境变量)使用动态sql。文档中的示例:
请参阅此处的文档。