ibatis CDATA
在使用ibatis时,经常需要配置待执行的sql语句。使用过ibatis的朋友都知道,无可避免的都会碰到一些不兼容、冲突的字符,多数人也都知道用<![CDATA[ ]]>标记避免Sql中与xml规范相冲突的字符对xml映射文件的合法性造成影响。但是,如果在ibatis中使用了动态语句的时候,还是有一些细节需要注意。下面举例说明一下:
环境:oracle、ibatis、java
错误例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文档中预定义好的实体:
< > 小于号
> < 大于号
& & 和
' ' 单引号
" " 双引号
一个 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语句中特殊字符处理方法的详细分析,我们可以看到,合理地使用字符串转义处理结合动态SQL标签,可以有效地解决特殊字符带来的问题。这样不仅可以保证查询的准确性,还可以提高代码的健壮性和...
在iBatis中,实现批量删除可以通过动态SQL,使用`IN`操作符结合`<foreach>`标签,将选中的ID集合传入SQL语句中。 2. **小组审核管理** - **问题1**: 建议优化`search`方法,使用联合查询替代多条SQL语句。iBatis...
- ****:用于定义和引用属性值,可以在配置文件中使用这些属性值来动态配置参数。 - ****:指定数据源类型及其具体配置信息,支持多种数据源实现方式,如SimpleDataSource、Jakarta DBCP等。 - ****:设置ibatis运行...
文档标题与描述均为“Ibatis查询Id列表.doc”,这表明文档内容主要聚焦于如何使用Ibatis查询ID列表。ID列表在实际应用中通常用于获取一系列记录的主键值,以便后续进行更复杂的操作或查询。 ### 三、查询Id列表的...
iBatis 是一款优秀的持久层框架,它将 SQL 映射到 Java 对象,简化了 JDBC 编程过程中的繁琐操作,提高了开发效率。iBatis 的核心功能包括 SQL 映射、动态 SQL 生成等,它通过配置文件或者注解的形式来实现 SQL 语句...
### IBATIS中,要查询出来的属性来自哪个xml,就把这个方法写在该xml下的深入解析 #### 一、IBATIS简介与工作原理 iBatis(现更名为MyBatis)是一个支持普通SQL查询、存储过程以及高级映射的优秀开源持久层框架。...
在XML中编写SQL语句时,需要处理特殊字符,如使用CDATA区避免解析错误。例如,`<![CDATA[...]]>` 可以包裹SQL语句,确保其正确解析。此外,Ibatis 提供了占位符机制,如 `#id#`,用于在SQL语句中引用Java对象的属性...
在使用iBATIS(现已被MyBatis取代)进行数据库操作时,我们常常需要传递参数到SQL语句中。在iBATIS中,有两种主要的方式来处理这些参数:使用`$`和`#`。这两种方式在不同的场景下有不同的效果。 首先,让我们来看看...
ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或注解进行配置,将接口及Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。 #### 二、and与or联合查询基础 在SQL查询中,`AND...
接下来,我们需要在 Ibatis 中配置这两个实体类以及它们之间的关联。 **`book.xml` 文件:** ```xml <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" ...
在iBatis的映射文件中,使用CDATA段可以包含SQL语句,这样可以避免XML特殊字符引起的问题。例如: ```xml <![CDATA[ SELECT * FROM person WHERE id = #{id} ]]> ``` #### 十一、SqlMapClient的使用 ...
- **基于 JTA 的事务管理**: 在分布式环境中使用 JTA 规范来进行事务管理。 - **外部事务管理**: 当应用服务器提供事务管理功能时使用。 **实现方法**: - 通过 `<transactionManager>` 配置事务管理器。 - 例如:`...
而对于使用Ibatis作为持久层框架的应用来说,如何有效地调用存储过程便成为了一个值得探讨的话题。本文将围绕“Ibatis调用存储过程”这一主题展开讨论,旨在帮助读者理解并掌握在Ibatis中调用存储过程的方法。 ####...
- **typeAlias 元素**:用于给常用的类定义别名,方便在映射文件中使用。 - **select 元素**:定义查询 SQL 语句。 - `id` 属性:唯一标识此 SQL 语句。 - `resultClass` 属性:指定结果集映射的 Java 类型。 - `...
Ibatis中的核心概念包括SqlMapConfig.xml配置文件、SqlMap接口、Mapper XML文件和Statement。SqlMapConfig.xml文件是全局配置文件,包含了数据源、事务管理器、SqlMap接口的配置等信息。SqlMap接口则对应数据库表,...
- 在实际应用中,推荐使用更现代的语法糖,比如MyBatis的动态SQL标签(`<if>`、`<choose>`等),来代替直接在SQL字符串中使用变量。 - 对于复杂的查询逻辑,考虑使用子查询或者连接查询来提高SQL语句的可读性和执行...
iBatis是一个开源的Java库,它允许程序员将SQL映射到...在示例中,我们看到了如何配置iBatis,创建SQL映射文件,以及在Java代码中使用这些映射。通过深入理解这些概念,开发者可以更有效地利用iBatis来处理数据库操作。
iBatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句直接写在 XML 映射文件中,从而实现了 SQL 与 Java 代码的分离,提高了开发效率和可维护性。本教程旨在帮助初学者快速掌握 iBatis 的基本使用,并通过调用...
首先,在Spring配置文件中配置数据源,这里使用的是MySQL: ```xml destroy-method="close"> ${jdbc.driver}" /> ${jdbc.url}" /> ${jdbc.username}" /> ${jdbc.password}" /> ``` 数据源配置通过`jdbc....