使用MyBatis编写SQL时使用符号报错的问题
一般我们写sql语句都会有一些条件判断语句,如下
select *
from mmall_order
where status = '1'
and create_time <= '2020.10.05'
order by create_time desc
但是在使用MyBatis时在XML文件中这样写是要报错的,如下
<select id="selectOrderStatusByCreateTime" resultMap="BaseResultMap" parameterType="map">
select
<include refid="Base_Column_List"></include>
from mmall_order
where status = #{status}
and create_time <= #{date}
order by create_time desc
</select>
这样写看似没有问题,实际上是有错的,xml里写<,>,!=号都是无法解析的,需要转移。
报错如下
解决方法
在使用这些符号时使用一个转移操作,即在外围包裹上<![CDATA[]]
如下
<select id="selectOrderStatusByCreateTime" resultMap="BaseResultMap" parameterType="map">
select
<include refid="Base_Column_List"></include>
from mmall_order
where status = #{status}
<![CDATA[
and create_time <= #{date}
]]>
order by create_time desc
</select>
这样就不会报错了
原理
在XML文件中,被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。<![CDATA[]]>表示xml解析器忽略解析,所以更快。