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

MyBatis - writing mappers for Oracle while testing against H2

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

但是,为了 运行 在这些映射器上进行适当的单元测试,我使用具有相同模式和一些模拟数据的 H2 数据库。这在大多数情况下工作正常,除了标准 SQL、H2 SQL 和 Oracle SQL.

之间存在差异的地方

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

因为我不想为 H2 和 Oracle 编写单独的映射器(这会失去对这些映射器进行单元测试的全部意义)并且希望尽可能避免数据库往返。,你会怎样建议我应该怎么做?

如果您不介意编写两个单独的 sql 语句,配置 databaseIdProvider 可能会帮助您,在映射器 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>