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?
Haha, I have the same problem now, but I found out the way.
That is to use bind
. I know I no longer can't call property
in that way.
<bind name="isGetList" value='"1"' />
<include refid="conditionSql" />
<sql id="conditionSql">
<if test='isGetList == "1"'>
for example.
</if>
</sql>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With