MyBatis - 在针对H2进行测试时为Oracle编写映射器

时间:2016-04-08 07:05:16

标签: java oracle unit-testing h2 mybatis

我目前正在编写MyBatis映射器,这些映射器生成的查询应该在QA和Production中针对Oracle DB运行。

但是,为了对这些映射器运行正确的单元测试,我使用具有相同模式和一些模拟数据的H2数据库。这在大多数情况下都可以正常工作,除非标准SQL,H2 SQL和Oracle SQL之间存在差异。

一个例子是多行插入,它具有不同的Oracle语法。

因为我不想为H2和Oracle编写单独的映射器(这会丢失单元测试这些映射器的全部内容),并且希望避免尽可能多地进行DB往返。你会建议我什么?应该做什么?

1 个答案:

答案 0 :(得分:1)

如果您不介意编写两个单独的sql语句,configure databaseIdProvider可能会帮助您,在mapper xml中您将会执行以下操作:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="CityMapper">

    <select id="findById" resultType="City" databaseId="oracle">

    </select>

    <select id="findById" resultType="City" databaseId="h2">

    </select>

</mapper>