关于Mybatis的if标签的一个小问题
在XML文件中书写了一段SQL语句,其中用到了if标签判断,如下所示:
<select id="queryStatisticsOfType" resultType="java.util.Map">
SELECT
dt.type_id,
CASE
WHEN ( d.state = 1 AND d.ONLINE = 1 ) THEN 2
WHEN ( d.state = 1 AND d.ONLINE = 0 ) THEN 1
WHEN d.state = 0 THEN 0 ELSE - 1
END AS item_type
FROM
inf_door dr
LEFT JOIN inf_device d ON d.device_id = dr.device_id
LEFT JOIN inf_device_type dt ON dt.type_id = d.type_id
WHERE
1 = 1
<if test="typeId != null and typeId == '301' ">
AND d.type_id = #{typeId}
</if>
<if test="communityId != null and communityId.trim() != ''">
AND d.parent_org_id = #{communityId}
</if>
</select>
由于刚开始书写错误,if 中的test:type == ‘301’ 条件判断少些了一个等号变成type = ‘301’
导致传进来的参数明明是302 但是idea的console打印出来的执行语句中参数却是301,后面经过排查了才发现原来if判断少写了一个等号了,导致判断语句变成了赋值语句。也发现了if里面原来还能赋值?! 也算是比较神奇的一个地方,我以为会直接略过这个判断(因为条件不符)。