使用MyBatis编写SQL时<号报错的问题

    科技2022-08-12  95

    使用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解析器忽略解析,所以更快。

    Processed: 0.021, SQL: 9