在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]>来解决。
<![CDATA[ ]]> 是什么,这是XML语法。在CDATA内部的所有内容都会被解析器忽略。
如果文本包含了很多的"<"字符 <=和"&"字符——就象程序代码一样,那么最好把他们都放到CDATA部件中。
但是有个问题那就是 <if test=""> </if> <where> </where> <choose> </choose> <trim> </trim> 等这些标签都不会被解析,所以我们只把有特殊字符的语句放在 <![CDATA[ ]]> 尽量缩小 <![CDATA[ ]]> 的范围。
SELECT(
CASE
WHEN oy.AMOUNT IS NULL THEN
(ny.AMOUNT-0)
WHEN ny.AMOUNT IS NULL THEN
(0-oy.AMOUNT)
ELSE
(ny.AMOUNT-oy.AMOUNT)
END) AS AMOUNT,
(
CASE
WHEN oy.AMOUNT IS NULL THEN
(ny.AMOUNT-0)/ny.AMOUNT
WHEN ny.AMOUNT IS NULL THEN
(0-oy.AMOUNT)/oy.AMOUNT
ELSE
"ROUND"((ny.AMOUNT-oy.AMOUNT)/ny.AMOUNT,2)
END) AS rate,
ny.BLEVEL FROM
(SELECT "SUM"(f.AMOUNT) AS AMOUNT,f.BLEVEL FROM FT_INCOME_REPORT_LOG f
WHERE "SUBSTR"(f.TXN_DATE,1,6) <![CDATA[ >= ]]> #{startMonth,jdbcType=VARCHAR} AND "SUBSTR"(f.TXN_DATE,1,6)
<![CDATA[ <= ]]> #{endMonth,jdbcType=VARCHAR} GROUP BY f.BLEVEL) ny
LEFT JOIN
(SELECT "SUM"(f.AMOUNT) AS AMOUNT,f.BLEVEL FROM FT_INCOME_REPORT_LOG f
WHERE "SUBSTR"(f.TXN_DATE,1,6) <![CDATA[ >= ]]> #{lastStartMonth,jdbcType=VARCHAR} AND "SUBSTR"(f.TXN_DATE,1,6) <![CDATA[ <= ]]> #{lastEndMonth,jdbcType=VARCHAR} GROUP BY f.BLEVEL) oy
ON ny.BLEVEL=oy.BLEVEL
ORDER BY ny.BLEVEL
分享到:
相关推荐
本文档包含了一个完整的实例,可以实现含有CDATA 的字符串转换成xml
在XML文档中,为了保证文档的结构正确性和语义...在这个例子中,使用CDATA块包裹比较运算符,防止XML解析器将其解释为元素或实体,确保了SQL查询的正确性。同时,由于SQL查询通常较长,使用CDATA块提高了代码的可读性。
除了实体引用,XML还提供了一种特殊的结构——CDATA区(Character Data),用于包含一大段不应被解析的文本。在CDATA区内,解析器会忽略所有特殊字符。例如: ```xml <![CDATA[ 这里可以放不会被解析的文本,包括...
在XML中,CDATA段是用来标记一段文本,告诉解析器这段文本不应被解析为XML元素。它的语法是`<![CDATA[ 开始文本 ]]>`。例如,如果你有一个XML字符串包含特殊字符如`或`>`,这些字符在XML中具有特殊含义,如果直接...
[CDATA[ 文本内容 ]]>`,其中"文本内容"部分不能包含字符串"]]>",以防止提前结束CDATA段。同时,CDATA段不能嵌套,也就是说,一个CDATA段内部不能再有另一个CDATA段。 要将Java对象转换成XML并包含CDATA,我们可以...
这意味着在CDATA段落内的任何XML标签或者实体引用都不会被解析器识别为真正的标签或实体。 ##### 形式与限制 CDATA的基本形式为:`<![CDATA[文本内容]]>`。需要注意的是,CDATA段落内不能包含字符串`]]>`,否则将会...
在这个例子中,“<”和“>”字符在CDATA区段内保持原样,不会被解析器误解为开始或结束标签。这使得可以在XML文档中安全地嵌入代码或其他含有特殊字符的文本。 ### PCDATA PCDATA是Parsed Character Data的缩写,...
在本讲中,我们将深入探讨PHP与XML的结合使用,特别是关于CDATA、实体字符处理以及DTD(Document Type Definition)的快速入门。XML是一种强大的数据交换格式,它允许我们以结构化的方式存储和传输数据。而PHP作为一...
2. **使用场景**:通常用于包含大量文本数据,这些数据可能包含了特殊字符,如果不使用CDATA,这些字符会被解析器错误地解释为标记。 3. **语法**:CDATA部分由`<![CDATA[`开始,并以`]]>`结束。 #### 三、生成...
[CDATA[” 标记开始,以”]]>”标记结束,是CDATA内部内容被解析器忽略。具体说明参考《XML CDATA是什么?》。 2.内容中含有低位非打印字符,解析时会报错:””(十六进制值 0x1D)是无效的字符.加载或保存XML时引发...
在XML文档中,CDATA(Character Data)区域用于包含不受解析的文本数据,通常用于包含特殊字符或者JavaScript代码。在处理XML时,有时我们需要读取或写入CDATA节中的内容。ASP.NET 3.5及以上版本提供了内置的序列化...
`,这些实体会被解析器处理。 3. 虽然CDATA段能避免解析问题,但并不意味着它可以无限制使用。在某些情况下,更好的解决方案可能是使用XML实体声明或转义特殊字符。 总结来说,XML文档中的字符数据段(CDATA)提供...
为了防止这些特殊字符被解析器解析,XML定义了CDATA区段(Character Data Sections),用以包含不希望被解析器进行解析的文本数据。 在PHP中操作XML,开发者会经常与CDATA区段打交道。对于需要在XML中包含脚本代码...
dom4j解析字符串 dom4j是Java语言中的一个开源API,用于解析XML文件和字符串。它具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的API文档来解析XML。 dom4j的优点: * 高...
为了解决这个问题,Mybatis提供了一些处理转义字符的方式,以确保SQL语句能够正确地写入Mapper.xml文件中并被解析。 在Mapper.xml文件中处理转义字符的常见方法主要有以下几种: 1. 常用的XML转义字符写法 在XML中...
[CDATA[ ]]> 来包含特殊字符的 SQL 语句,以防止这些特殊字符被转义。同时,我们也使用 `<if>` 标签来实现动态 SQL 语句的拼接。 <![CDATA[ ]]> 是 Mybatis 中一个非常有用的元素,它可以帮助我们解决特殊字符的...
2. CDATA段内不能包含未闭合的`]]>`序列,因为这会被解析器误认为是CDATA段的结束标志。 3. 尽管CDATA段可以包含大多数特殊字符,但仍然不能包含`&`字符,除非写成`&`的形式。这是因为XML解析器在解析过程中会将...
其中,单引号(`'`)被替换为两个单引号(`''`),这是为了防止字符串中的单引号与SQL语句中的单引号发生冲突。而斜杠(`/`)、百分号(`%`)以及下划线(`_`)都被加上了转义字符斜杠(`/`)。 ##### 2.2 使用动态SQL标签 ...
CDATA区段用于包含不受解析器解析的纯文本,特别适合包含特殊字符或JavaScript代码。 TinyXML2库提供了几个主要类,如`XMLDocument`、`XMLElement`、`XMLText`和`XMLComment`等,用于操作XML文档。我们先从解析XML...
CDATA(Character Data)的主要作用是将特殊字符或实体引用包装到CDATA节中,以避免浏览器对这些字符的解析。通常情况下,CDATA节用于Script和Style元素中,以便正确地呈现JavaScript代码和CSS样式规则。 在HTML文...