Ibatis配置xml文件CDATA使用方法详解
ibatis作为一种半自动化的OR Mapping工具,其灵活性日益体现出来,越来越多的人都倾向于在项目中使用。由于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"> <![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>
错误例2:将整个sql语句用<![CDATA[ ]]>标记来避免冲突,在一般情况下都是可行的,但是由于该sql配置中有动态语句(where部分),将导致系统无法识别动态判断部分,导致整个sql语句非法。
<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>
正确做法:缩小范围,只对有字符冲突部分进行合法性调整。
<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>
总结:
在用CDATA的时候,只用把可能产生冲突的那段代码包含就可以了,不要盲目的包含。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
ibatis迁移到mybatis3的注意事项
DocUpgrade3 这一页提供了一些当你从ibatis迁移到mybatis3时非常有用的信息.不能保证100%的完整. 这个项目现在的地址是 Github https://github.com/mybatis/ibatis2mybatis 转换工具 在下载区有一个可用的工具,可以帮你将iBATIS 2.x sqlmap文件转换为MyBatis 3.x xml mapper文件. 从这里获取 http://mybatis.googlecode.com/files/ibatis2mybatis
-
Mybatis与Ibatis的区别
Mybatis与Ibatis的区别: 1.Mybatis实现了接口绑定,使用更加方便 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便. 这可以说是Mybatis最重要的改进. 注意: 虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置, 不过强烈建议仍然使用xml配置的方式.毕竟annotation的配置方式功能有限且代码
-
ibatis学习之搭建Java项目
IBATIS简介 ibatis是 Apache的开源项目,一个ORM 解决方案,ibatis最大的特点就是小巧,上手很快. 使用 ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM而言是基本一致的. iBatis是一个基于SQL映射支持Java和·NET的持久层框架,相对Hibernate和ApacheOJB等"一站式"ORM解决方案而言,iBatis 是一种"半自动化"的ORM实现. 一.J
-
java~springboot~ibatis数组in查询的实现方法
在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如where in这种从数组里查询符合条件的集合里,需要在xml里进行特别的处理. <update id="batchUpdate" parameterType="map"> update customer_info set status=#{status},appoint_time=#{appointTime} whe
-
Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法
Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法 一.问题描述 写好配置文件用JUnit进行测试,一运行就报错: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiat
-
在Spring使用iBatis及配置讲解
就像集成JDBC和其他ORM框架一样,Spring也集成了iBatis. 1,配置iBatis客户模板 iBatis的核心是com.ibatis.sqlmap.SqlMapClient接口.SqlMapClient大致相当于Hibernate的Session或JPA的EntityManager,用于执行全部的数据访问操作. Spring解决iBatis会话管理和异常处理问题的方案是SQLMapClientTemplate.SQLMapClientTemplate包裹了一个SqlMapClient
-
struts2+spring+ibatis框架整合实现增删改查
初步学习SSI框架,做的struts2+spring+ibatis框架整合的小实例,实现增删改查操作. 项目框架如下所示: 准备工作:导入需要的struts2.spring.ibatis的jar包,这里不一一列举了. 下面直接上完整的配置文件内容和代码,不说明先后步骤了 一.配置文件 1.spring配置文件applicationContext.xml(业务逻辑层) <?xml version="1.0" encoding="UTF-8"?> <b
-
ibatis结合oracle批量插入三种方法的测评
第一种 < insert id =" insert_table " parameterClass ="java.util.List" > <![CDATA[ insert into sj_test( col1 , col2 , col3 ) values ]]> < iterate conjunction ="," > <![CDATA[ (#test[]. col1 #, # test []. col2
-
通过ibatis解决sql注入问题
于ibaits参数引用可以使用#和两种写法,其中#写法会采用预编译方式,将转义交给了数据库,不会出现注入问题:如果采用两种写法,其中#写法会采用预编译方式,将转义交给了数据库,不会出现注入问题:如果采用写法,则相当于拼接字符串,会出现注入问题. 例如,如果属性值为"' or '1'='1 ",采用#写法没有问题,采用写法就会有问题.对于语句,难免要使用写法就会有问题.对于like语句,难免要使用写法, 1. 对于Oracle可以通过'%'||'#param#'||'%'避免: 2. 对
-
Ibatis配置xml文件CDATA使用方法详解
ibatis作为一种半自动化的OR Mapping工具,其灵活性日益体现出来,越来越多的人都倾向于在项目中使用.由于Sql中经常有与xml规范相冲突的字符对xml映射文件的合法性造成影响.许多人都知道使用<![CDATA[ ]]>标记来避免冲突,但是在sql配置中有动态语句的时候,还是有一些细节需要特别注意的. 在使用ibatis时,经常需要配置待执行的sql语句.使用过ibatis的朋友都知道,无可避免的都会碰到一些不兼容.冲突的字符,多数人也都知道用<![CDATA[ ]]>标
-
spring通过导入jar包和配置xml文件启动的步骤详解
第一步,进到 spring仓库下载一个spring包,大家前往官网下载的时候,记得下载dist.zip后缀的包,里面包括了jar包和对应的英文文档. 下面是自己已经下载的一个,提供百度云链接: 百度云,提取码:hpst 第二步,打开idea -> File -> Project Structrure -> Libraries,点击上面的 "+"号,找到存放spring源码的目录,进入libs目录,然后将 beans.context.core.expression.jc
-
python中Django文件上传方法详解
Django上传文件最简单最官方的方法 1.配置media路径 在settings.py中添加如下代码: MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2.定义数据表 import os from django.db import models from django.utils.timezone import now as timezone_now def upload_to(instance, filename): now = timezo
-
对python中xlsx,csv以及json文件的相互转化方法详解
最近需要各种转格式,这里对相关代码作一个记录,方便日后查询. xlsx文件转csv文件 import xlrd import csv def xlsx_to_csv(): workbook = xlrd.open_workbook('1.xlsx') table = workbook.sheet_by_index(0) with codecs.open('1.csv', 'w', encoding='utf-8') as f: write = csv.writer(f) for row_num
-
对Python之gzip文件读写的方法详解
gzip文件读写的时候需要用到Python的gzip模块. 具体使用如下: # -*- coding: utf-8 -*- import gzip # 写文件 f_out = gzip.open("xxx.gz", "wb") # 读文件 # f_in = gzip.open("xxx.gz", "rb") for line in open("yyy.txt", "rb"): f_out
-
javascript读取本地文件和目录方法详解
JavaScript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高级语言中经常做的工作一样.怎么样,你是否需要了解这方面的知识?那就请跟我来,本文将详细描述如何使用Javascript语言进行文件操作. 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详
-
基于Python实现配置热加载的方法详解
目录 背景 如何实现 使用多进程实现配置热加载 使用signal信号量来实现热加载 采用multiprocessing.Event 来实现配置热加载 结语 背景 由于最近工作需求,需要在已有项目添加一个新功能,实现配置热加载的功能.所谓的配置热加载,也就是说当服务收到配置更新消息之后,我们不用重启服务就可以使用最新的配置去执行任务. 如何实现 下面我分别采用多进程.多线程.协程的方式去实现配置热加载. 使用多进程实现配置热加载 如果我们代码实现上使用多进程, 主进程1来更新配置并发送指令,任务的
-
Python处理XML格式数据的方法详解
本文实例讲述了Python处理XML格式数据的方法.分享给大家供大家参考,具体如下: 这里的操作是基于Python3平台. 在使用Python处理XML的问题上,首先遇到的是编码问题. Python并不支持gb2312,所以面对encoding="gb2312"的XML文件会出现错误.Python读取的文件本身的编码也可能导致抛出异常,这种情况下打开文件的时候就需要指定编码.此外就是XML中节点所包含的中文. 我这里呢,处理就比较简单了,只需要修改XML的encoding头部. #!/
-
VC解析XML文件-CMarkup的使用详解
VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等.据说tinyXML很好,可能字符集问题,我编译不了.所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便.CMarkup下载地址:http://www.firstobject.com/发现网上有方法很法,我就摘下来了 复制代码 代码如下: //----------UserInfo.xml-------------- xml version="1.0" encoding=&q
-
java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/projects/dom4j/ 一.介绍及优缺点分析
随机推荐
- Ruby中钩子方法的运用实例解析
- 使用D3.js制作图表详解
- 另一种希望别人无法修改js的代码
- C++中的异常处理机制详解
- 使用php实现网站验证码功能【推荐】
- js登录弹出层特效
- asp.net(C#)遍历memcached缓存对象
- 全面了解PHP中的全局变量
- Android获取经纬度计算距离介绍
- JavaScript的this关键字的理解
- android中在Activity中响应ListView内部按钮的点击事件的两种方法
- JavaScript图片轮播代码分享
- Android组件content provider使用解析
- 详解SQL中Group By的用法
- 基于jQuery的左右滚动实现代码
- JavaScript 打地鼠游戏代码说明
- Bootstrap每天必学之缩略图与警示窗
- java中rss解析器(rome.jar和jdom.jar)示例
- Python中利用原始套接字进行网络编程的示例
- C#编程实现动态改变配置文件信息的方法