由于<符号在xml中会被认为是一个标签的开头,因此直接在xml中试用<符号进行比较是有问题的,因此常用的方式就是将<进行转义,告诉xml这就只是一个<符号,这里我推荐两种解决方案。
一、使用html实体语言,< >
<if test="startTime != null">
and createTime >= #{startTime,jdbcType=DATE}
</if>
<if test="endTime != null">
and createTime <= #{endTime,jdbcType=DATE}
</if>
<,>也就是小于和大于的意思,搭配=符号就能实现小于等于<=和大于等于>=的效果。
注意如果你比较的类型都是date类型,那么在test中不要加入startTime != '',这会让xml认为你传递的参数是字符串类型,在比较过程中就会报错,string和date类型的比较是无效的。
同时也不推荐使用string类型进行时间的比较,可能会存在潜在的bug
二、<![CDATA[ <= ]]>语法
<if test="startTime != null">
and createTime <![CDATA[ <= ]]> #{startTime,jdbcType=DATE}
</if>
<if test="endTime != null">
and createTime <![CDATA[ >= ]]> #{endTime,jdbcType=DATE}
</if>
<![CDATA[ <= ]]>的意思就是将其中包裹的<=当作纯文本,而不会解析为 XML 元素或实体引用
在XML中,小于(<)和大于(>)符号需要转义以避免被解析为标签。文章介绍了两种解决方案:一是使用HTML实体(<,>)进行转义,适用于小于等于和大于等于的比较;二是使用CDATA段落,确保内容不被解析。对于日期比较,应注意避免将参数错误地识别为字符串类型,以防止比较错误。

被折叠的 条评论
为什么被折叠?



