mybatis 中的<![CDATA[ ]]>用法及说明

柔情只为你懂 2022-12-21 04:48 304阅读 0赞

一、简要概述

  1. 平时在mybatis的映射文件写sql时,很多时候都需要写一些特殊的字符。例如:”<” 字符 “>” 字符 “>=” 字符 “<=” 字符,但是在xml文件中并不能直接写上述列举的字符,否则就会报错。
  2. 因为在解析xml文件时候,我们如果书写了特殊字符,在没有特殊处理的情况下。这些字符会被转义,但我们并不希望它被转义,所以我们要使用<![CDATA[ ]]>来解决。
  3. 那为什么要这样书写呢?<![CDATA[ ]]> ,不言而喻:这是XML语法。在CDATA内部的所有内容都会被解析器忽略。
  4. 所以,当我们在xml文本中包含了很多的”<” 字符 “<=” 和 “&” 字符—就像程序代码一样,那么最好把他们都放到CDATA部件中。

二、实际书写规范

  1. 有个问题需要注意的就是在我们的mybatis的映射文件中,以下 等这些标签都不会被解析,所以我们只把有特殊字符的语句放在 <![CDATA[ ]]>中,尽量缩小 <![CDATA[ ]]> 的范围。
  2. 案例

    SELECT FROM (SELECT t., rownum FROM bst_busi_msg t

    1. <where>
    2. <if test="targetId != null">
    3. and (t.busi_sys_order = #{targetId,jdbcType=VARCHAR}
    4. or t.busi_intf_seq = #{targetId,jdbcType=VARCHAR}
    5. )
    6. </if>
    7. <if test="targetId == null and shardingTotal > 0">
    8. and (t.task_status = '0'
    9. OR (t.task_status = '3'
    10. AND t.task_count <![CDATA[ < ]]> ${@com.asiainfo.bst.common.Constant@max_handle_count()}
    11. )
    12. )
    13. and MOD(t.msg_id,#{shardingTotal,jdbcType=NUMERIC}) = #{shardingIndex,jdbcType=NUMERIC}
    14. </if>
    15. </where>
    16. ORDER BY t.msg_id ASC
    17. ) WHERE rownum <![CDATA[ <= ]]> #{rownum,jdbcType=NUMERIC}

[说明]
因为这里有 ">" "<=" 特殊字符所以要使用 <![CDATA[ ]]> 来注释,但是有<if>标签,所以把<if>等放外面

发表评论

表情:
评论列表 (有 0 条评论,304人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mybatis![CDATA[ ]]语法介绍

    记录一下今天遇到的问题:在mybatis的xml文件中需要写一些特殊字符 如 > < & 这些字符在xml解析的时候会被转义,但是我们不希望它被转义,这时候就可以使用<!\[C

    相关 mybatis!CDATA作用

    在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<!\[C