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