ibatis作为一种半自动化的OR Mapping工具,2010年这个项目由apache sofeware foundation 迁移到了google code,并且改名为mybatis。其灵活性日益体现出来,越来越多的人都倾向于在项目中使用。由于Sql中经常有与xml规范相冲突的字符对xml映射文件的合法性造成影响。许多人都知道使用<![CDATA[ ]]>标记来避免冲突,但是在sql配置中有动态语句的时候,还是有一些细节需要特别注意的,不然是费心又费力。 在使用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中,要查询出来的属性来自哪个xml,就把这个方法写在该xml下的深入解析 #### 一、IBATIS简介与工作原理 iBatis(现更名为MyBatis)是一个支持普通SQL查询、存储过程以及高级映射的优秀开源持久层框架。...
通过对ibatis框架下SQL语句中特殊字符处理方法的详细分析,我们可以看到,合理地使用字符串转义处理结合动态SQL标签,可以有效地解决特殊字符带来的问题。这样不仅可以保证查询的准确性,还可以提高代码的健壮性和...
iBatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,方便数据库操作。 在小组后台管理中,存在以下几个与iBatis相关的问题: 1. **小组分类管理** - **问题1**: 在删除二级分类时,未...
### iBatis基础教程知识点详解 #### 一、iBatis简介与背景 iBatis是一种流行的开源框架,主要用于在Java应用程序中实现数据库...无论是对于初学者还是有经验的开发者,掌握iBatis的基本原理和使用方法都将大有裨益。
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
### ibatis教程学习笔记 #### 一、ibatis简介与特点 ...这些知识点对于初学者来说至关重要,它们不仅有助于快速掌握 ibatis 的使用方法,还能够帮助开发者更好地理解和应用这一框架,从而提高开发效率和代码质量。
本文详细介绍了 iBatis 中多表查询的概念及其配置方法。通过上述示例,我们可以了解到如何在 iBatis 中编写复杂的 SQL 查询语句,并且如何通过定义合适的 `ResultMap` 来处理查询结果。这对于实际项目开发具有重要的...
在Ibatis中,可以通过XML映射文件来定义存储过程的调用。下面是一个具体的例子: ```xml <!-- 存储过程参数映射 --> <!-- 调用存储过程 --> <![CDATA[ {call share_dev_prv_to_person(?,?,?,...
Ibatis中的核心概念包括SqlMapConfig.xml配置文件、SqlMap接口、Mapper XML文件和Statement。SqlMapConfig.xml文件是全局配置文件,包含了数据源、事务管理器、SqlMap接口的配置等信息。SqlMap接口则对应数据库表,...
首先,在Spring配置文件中配置数据源,这里使用的是MySQL: ```xml destroy-method="close"> ${jdbc.driver}" /> ${jdbc.url}" /> ${jdbc.username}" /> ${jdbc.password}" /> ``` 数据源配置通过`jdbc....
下面我们将深入探讨iBatis的关键概念和使用方法。 一、iBatis概述 iBatis最初由Clinton Begin开发,后来成为Apache软件基金会的一个项目。它的核心理念是将SQL与Java代码分离,通过XML或注解来定义SQL语句,提供了...
### ibatis高级特性详解 ...本文详细介绍了 ibatis 中的一些高级特性,包括数据关联、延迟加载、动态映射以及事务管理等内容。通过这些特性的使用,开发者能够更高效地处理数据库操作,并提高应用程序的性能和灵活性。
在使用iBATIS(现已被MyBatis取代)进行数据库操作时,我们常常需要传递参数到SQL语句中。在iBATIS中,有两种主要的方式来处理这些参数:使用`$`和`#`。这两种方式在不同的场景下有不同的效果。 首先,让我们来看看...
iBatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句直接写在 XML 映射文件中,从而实现了 SQL 与 Java 代码的分离,提高了开发效率和可维护性。本教程旨在帮助初学者快速掌握 iBatis 的基本使用,并通过调用...
在Java开发中,使用Spring+iBatis框架,经常会遇到标准的SQL映射方法无法满足特定业务需求的情况。此时,就需要自定义SQL来实现功能扩展。本文将详细介绍如何在iBatis框架中执行自定义SQL字符串,以及解决在实际应用...
在ibatis中,通过XML配置文件或注解的方式定义SQL语句,并与Java接口的方法进行绑定。这种方式通常被称为“查询语句配对”。 **示例代码解析**: ```xml <![CDATA[ SELECT p.* FROM MEMBER_POST p, MEMBER_...
根据提供的文件信息,我们可以深入探讨ibatis框架中的动态SQL元素及其使用方法。下面将详细介绍标题、描述以及部分内容中涉及的关键知识点。 ### ibatis 动态代理DTD #### 标题解释 - **ibatis**: 是一个开源的...
3. **配置Web应用**:用blazeds的web.xml文件替换Web项目中的web.xml文件,确保配置正确无误。 **第七步:编写测试代码** 在`flex_src/door4flex.mxml`文件中编写简单的Flex代码以验证集成是否成功。示例代码如下...