由于<符号在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 元素或实体引用