【问题标题】:MyBatis - writing mappers for Oracle while testing against H2MyBatis - 在针对 H2 进行测试时为 Oracle 编写映射器
【发布时间】:2016-07-29 08:37:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java oracle unit-testing h2 mybatis


    【解决方案1】:

    如果您不介意编写两个单独的 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>
    

    【讨论】:

    • 这种方法可能是我的做法。唯一的问题是 Oracle 查询在实际针对 Oracle 运行之前一直未经测试。
    猜你喜欢
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多