`
weiythi
  • 浏览: 7094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

ibatis中CDATA的使用【转】

 
阅读更多

ibatis CDATA

 

在使用ibatis时,经常需要配置待执行的sql语句。使用过ibatis的朋友都知道,无可避免的都会碰到一些不兼容、冲突的字符,多数人也都知道用<![CDATA[   ]]>标记避免Sql中与xml规范相冲突的字符对xml映射文件的合法性造成影响。但是,如果在ibatis中使用了动态语句的时候,还是有一些细节需要注意。下面举例说明一下:

 

 

 

环境:oracleibatisjava

 

 

 

错误例1:符号“<=”会对xml映射文件的合法性造成影响

 

 

 

<select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long"> 

 

select id

 

from tableA a,

 

     tableB b

 

 <dynamic prepend="WHERE">

 

 <isNotNull prepend="AND" property="startDate">

 

  a.act_time >= #startDate#

 

  and a.act_time <= #endDate#

 

  and a.id = b.id

 

 </isNotNull>   

 

 </dynamic> 

 

</select>

 

 

 

错误例2:将整个sql语句用<![CDATA[   ]]>标记来避免冲突,在一般情况下都是可行的,但是由于该sql配置中有动态语句(where部分),将导致系统无法识别动态判断部分,导致整个sql语句非法。

 

 

 

<select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">

 

<![CDATA[  

 

select id

 

from tableA a,

 

     tableB b

 

 <dynamic prepend="WHERE">

 

 <isNotNull prepend="AND" property="startDate">

 

  a.act_time >= #startDate#

 

  and a.act_time <= #endDate#

 

  and a.id = b.id

 

 </isNotNull>   

 

 </dynamic> 

 

  ]]>

 

</select>

 

 

 

正确做法:缩小范围,只对有字符冲突部分进行合法性调整。

 

 

 

<select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long"> 

 

select id

 

from tableA a,

 

     tableB b

 

 <dynamic prepend="WHERE">

 

 <isNotNull prepend="AND" property="startDate">

 

  a.act_time >= #startDate#

 

  <![CDATA[ and a.act_time <= #endDate#  ]]>

 

  and a.id = b.id

 

 </isNotNull>   

 

 </dynamic> 

 

</select>

 

------------------------------------------------------------------

ibatis中应该经常见到"<![CDATA["这样的东西吧,它的用处应该是转义一些特殊关键字字符,不合法的XML字符必须被替换为相应的实体。 下面是五个在XML文档中预定义好的实体:

 

< &gt;  小于号

> &lt;  大于号

& &

&apos; ' 单引号

" " 双引号

 

一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束:

 

<message>if salary < 1000 then</message>

 

为了避免出现这种情况,必须将字符"<" 转换成实体,象下面这样:

 

<message>if salary < 1000 then</message>

 

这里有一个问题,由于我在ibatis中用到了一个循环标签"<iterate>" ,为了写一个  类似

 

SELECT * FROM b

 

WHERE b.trade_no in

 <iterate property="tradeNoList" open="(" close=")" conjunction=",">#tradeNoList[]#</iterate>

   AND .........这样的一个语句。

 

由于"<iterate"标签以 "<"开头,那么可能被"<![CDATA["转义了,所以造成语法错误,sql不能正常执行,去掉"<![CDATA["后发现sql能正常执行。

 

所以在碰到类似问题的时候,应该留意,在"<![CDATA["转义符中间不要用标签。

 

分享到:
评论

相关推荐

    ibatis sql语句对条件中特殊字符% # 处理

    通过对ibatis框架下SQL语句中特殊字符处理方法的详细分析,我们可以看到,合理地使用字符串转义处理结合动态SQL标签,可以有效地解决特殊字符带来的问题。这样不仅可以保证查询的准确性,还可以提高代码的健壮性和...

    ibatis日期格式.doc

    在iBatis中,实现批量删除可以通过动态SQL,使用`IN`操作符结合`&lt;foreach&gt;`标签,将选中的ID集合传入SQL语句中。 2. **小组审核管理** - **问题1**: 建议优化`search`方法,使用联合查询替代多条SQL语句。iBatis...

    ibatis环境搭建教程

    - ****:用于定义和引用属性值,可以在配置文件中使用这些属性值来动态配置参数。 - ****:指定数据源类型及其具体配置信息,支持多种数据源实现方式,如SimpleDataSource、Jakarta DBCP等。 - ****:设置ibatis运行...

    Ibatis查询Id列表.doc

    文档标题与描述均为“Ibatis查询Id列表.doc”,这表明文档内容主要聚焦于如何使用Ibatis查询ID列表。ID列表在实际应用中通常用于获取一系列记录的主键值,以便后续进行更复杂的操作或查询。 ### 三、查询Id列表的...

    Ibatis查询语句里,可以使用多表查询

    iBatis 是一款优秀的持久层框架,它将 SQL 映射到 Java 对象,简化了 JDBC 编程过程中的繁琐操作,提高了开发效率。iBatis 的核心功能包括 SQL 映射、动态 SQL 生成等,它通过配置文件或者注解的形式来实现 SQL 语句...

    IBATIS中,要查询出来的属性来自哪个xml,就把这个方法写在该xml下

    ### IBATIS中,要查询出来的属性来自哪个xml,就把这个方法写在该xml下的深入解析 #### 一、IBATIS简介与工作原理 iBatis(现更名为MyBatis)是一个支持普通SQL查询、存储过程以及高级映射的优秀开源持久层框架。...

    Ibatis框架的核心知识点

    在XML中编写SQL语句时,需要处理特殊字符,如使用CDATA区避免解析错误。例如,`&lt;![CDATA[...]]&gt;` 可以包裹SQL语句,确保其正确解析。此外,Ibatis 提供了占位符机制,如 `#id#`,用于在SQL语句中引用Java对象的属性...

    Ibatis资料ibatai sql map iBATIS使用$和#的一些理解

    在使用iBATIS(现已被MyBatis取代)进行数据库操作时,我们常常需要传递参数到SQL语句中。在iBATIS中,有两种主要的方式来处理这些参数:使用`$`和`#`。这两种方式在不同的场景下有不同的效果。 首先,让我们来看看...

    ibatis and和or联合查询 .doc

    ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或注解进行配置,将接口及Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。 #### 二、and与or联合查询基础 在SQL查询中,`AND...

    Ibatis多表查询

    接下来,我们需要在 Ibatis 中配置这两个实体类以及它们之间的关联。 **`book.xml` 文件:** ```xml &lt;!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" ...

    ibatis基础教程

    在iBatis的映射文件中,使用CDATA段可以包含SQL语句,这样可以避免XML特殊字符引起的问题。例如: ```xml &lt;![CDATA[ SELECT * FROM person WHERE id = #{id} ]]&gt; ``` #### 十一、SqlMapClient的使用 ...

    ibatis高级特性

    - **基于 JTA 的事务管理**: 在分布式环境中使用 JTA 规范来进行事务管理。 - **外部事务管理**: 当应用服务器提供事务管理功能时使用。 **实现方法**: - 通过 `&lt;transactionManager&gt;` 配置事务管理器。 - 例如:`...

    Ibatis调用存储过程调用存储过程

    而对于使用Ibatis作为持久层框架的应用来说,如何有效地调用存储过程便成为了一个值得探讨的话题。本文将围绕“Ibatis调用存储过程”这一主题展开讨论,旨在帮助读者理解并掌握在Ibatis中调用存储过程的方法。 ####...

    ibatis教程学习笔记

    - **typeAlias 元素**:用于给常用的类定义别名,方便在映射文件中使用。 - **select 元素**:定义查询 SQL 语句。 - `id` 属性:唯一标识此 SQL 语句。 - `resultClass` 属性:指定结果集映射的 Java 类型。 - `...

    ibatis笔记

    Ibatis中的核心概念包括SqlMapConfig.xml配置文件、SqlMap接口、Mapper XML文件和Statement。SqlMapConfig.xml文件是全局配置文件,包含了数据源、事务管理器、SqlMap接口的配置等信息。SqlMap接口则对应数据库表,...

    ibatis查询语句配对.doc

    - 在实际应用中,推荐使用更现代的语法糖,比如MyBatis的动态SQL标签(`&lt;if&gt;`、`&lt;choose&gt;`等),来代替直接在SQL字符串中使用变量。 - 对于复杂的查询逻辑,考虑使用子查询或者连接查询来提高SQL语句的可读性和执行...

    iBatis示例

    iBatis是一个开源的Java库,它允许程序员将SQL映射到...在示例中,我们看到了如何配置iBatis,创建SQL映射文件,以及在Java代码中使用这些映射。通过深入理解这些概念,开发者可以更有效地利用iBatis来处理数据库操作。

    ibatis入门教程

    iBatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句直接写在 XML 映射文件中,从而实现了 SQL 与 Java 代码的分离,提高了开发效率和可维护性。本教程旨在帮助初学者快速掌握 iBatis 的基本使用,并通过调用...

    ibatis+spring完全整合

    首先,在Spring配置文件中配置数据源,这里使用的是MySQL: ```xml destroy-method="close"&gt; ${jdbc.driver}" /&gt; ${jdbc.url}" /&gt; ${jdbc.username}" /&gt; ${jdbc.password}" /&gt; ``` 数据源配置通过`jdbc....

Global site tag (gtag.js) - Google Analytics