小编jam*_*uge的帖子

Mybatis If语句使用包含属性

我试图在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片段的属性?

java postgresql dynamic-sql ognl mybatis

5
推荐指数
1
解决办法
4822
查看次数

标签 统计

dynamic-sql ×1

java ×1

mybatis ×1

ognl ×1

postgresql ×1