I'm trying to create a generic SQL include in Mybatis that will apply a comparator given a particular value. The idea is to reuse this sql code snippet across several mappers. The issue I'm having is when using string substitution in the if statement inside of my include.
Currently the xml looks like this:
<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>
When using the ${comparator} inside of the test the OGNL expression is evaluated before the string substitution occures causing a ParseException because $ is not a valid first character.
Is there a way to reference a property of an sql snippet inside of an OGNL expression?