首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

ibatis的dynamicSQL中,关于prepend的应用

2012-06-26 
ibatis的dynamicSQL中,关于prepend的使用ibatis的文档中,关于动态SQL的举例如下:当需要使用根据传入参数的

ibatis的dynamicSQL中,关于prepend的使用
ibatis的文档中,关于动态SQL的举例如下:



当需要使用根据传入参数的值来动态组装SQL时,可以使用dynamic标签。
dynamic元素可以包含多个条件比较元素,并且按照条件比较元素的表述对参数值进行比较,来组装动态SQL。
这里主要的条件比较元素包含isGreaterThan、isNotNull、isEmpty……

dynamic元素和条件比较元素,都是组成动态SQL的一部分,其中的prepend属性根据实际情况的需要辅助的组装动态SQL。

以上面的statement为例:
1)dynamic的prepend只要检测到第一个为“真”的条件比较元素,则覆盖其prepend属性并组装where关键字为动态SQL的一部分。
2)isNotNull的prepend只要检测到参数值满足比较条件,则前置组装and关键字为动态SQL的一部分。

注意一点:上面的例子中,ibtis文档中说 - dynamic元素中的prepend属性“where”将覆盖第一个为“真”的条件比较元素(即isGreaterThan)的prepend属性
按照这个理解,则第一个为“真”的条件比较元素(即isGreaterThan)的prepend属性是不需要的,或者“and”是不需要的,(ibatis文档中的原文是 For example, in the case of the first true condition, there is no need for the AND, and in fact it would break the statement) 则修改上述例子为

事实上,这样修改的结果导致最终SQL 变为
“select * from ACCOUNT where ACC_ID = #id#    ACC_LAST_NAME = #lastName#”
明显是有问题的。

跟踪源码发现,ibatis在检测sqlTag的时候,调用了如下方法

或者
 

热点排行