Mybatis If语句使用包含属性

jam*_*uge 5 java postgresql dynamic-sql ognl mybatis

我试图在Mybatis中创建一个通用SQL包含,它将应用给定特定值的比较器。想法是在多个映射器之间重用此sql代码段。我遇到的问题是在include内的if语句中使用字符串替换时。

当前,xml如下所示:

<select id="get" parameterType="ServiceModelQueryHelper" resultMap="ServiceRecordMap">
    SELECT * from service
    <if test="name.isApplicable()">
        WHERE service.name
        <include refid=comparatorMapper>
            <property name="comparator" value="${name.comparator}"/>
            <property name="value" value="${name.value}"/>
        </include>
    </if>
</select>
<sql id="comparatorMapper">
    <if test="${comparator} == 'EQUALS'">
        = ${value}
    </if>
    <if test="${comparator} == 'CONTAINS'">
        ~ ${value}
    </if>
</sql>
Run Code Online (Sandbox Code Playgroud)

在测试内部使用$ {comparator}时,会在字符串替换发生之前评估OGNL表达式,从而导致ParseException,因为$不是有效的第一个字符。

有没有办法在OGNL表达式内引用sql片段的属性?

小智 -1

看一下mybatis 文档。条件语句 don\xc2\xb4t 需要 #,$ 样式引用。

\n

  • 我知道条件语句不需要样式引用,但要在包含中使用传入的属性,您需要使用 $ 符号。不使用这些符号会导致查询再次查看父对象,在我看来,这违背了传递属性的目的(如果您想在包含中使用动态 sql) (4认同)