Ibatis中#和$两个符号的使用区别
2012-08-08 19:47
232 查看
转自:http://www.mysjtu.com/page/M0/S542/542113.html
一般在Ibatis的动态SQL部分,使用例如#id#,$id$这样的格式,
1、在复杂动态SQL语句中,类似#field#,如果field变量值为id,则Ibatis会将#field#转换为‘id’;
例如:<statement id ="getProduct" resultMap="get-product-result">
SELECT * FROM PRODUCT
<dynamic prepend="WHERE">
<isNotEmpty property="description">
PRD_DESCRIPTION $operator$ #description#
</isNotEmpty>
</dynamic>
</statement>
上面的例子中,参数对象的operator属性将用于替换符号$operator$,假设operator属性等于“like”,description属性等于“%dog%”,生成的SQL语句如下,
SELECT * FROM PRODUCT WHERE PRD_DESCRIPTION LIKE "%dog%"
在复杂动态SQL语句中(即语句中有<dynamic >,<isNotEmpty>等标签,<iterate>标签除外),##中的变量解析之后会被""括起来,作为一个String;
$$中的变量会直接解析;2、在包含iterate的动态语句中,必须使用##,但是不会作为String来处理,而是直接解析变量,例如:
<update id="updateCDNSRVFileStatus" >
update #tableName# set STATUS = #status#
<isPropertyAvailable prepend="WHERE" property="videoFileIds" >
FILE_ID IN
<iterate property="videoFileIds" open="(" close=")" conjunction=",">
#videoFileIds[]#
</iterate>
</isPropertyAvailable>
</update>
ibatis中的order by 参数配置问题
今天在写项目的时候,碰到了这个问题,调试了半天都没搞定。最后把问题锁定到xml配置文件上:
一般配置文件都这么写
<select ...>
select * from table where XXX = #valule# order by #value#
</select>
但是由于ibatis在将参数值映射到statement里面时,所以对于 #value# 会解释成 字符串 "value" ,于是我的代码就被解释成
select * from table where XXX = "valule" order by "value"
这样显然不对,所以得换个方法
<select ...>select * from table where XXX = #valule# order by $value$</select>
用$$来包含order by的参数,就OK了~因为$$内的value不会被解释成"value",而是直接原样翻译。
总结:如果要考虑数据类型,用#;若是只考虑字符,则用$.
一般在Ibatis的动态SQL部分,使用例如#id#,$id$这样的格式,
1、在复杂动态SQL语句中,类似#field#,如果field变量值为id,则Ibatis会将#field#转换为‘id’;
例如:<statement id ="getProduct" resultMap="get-product-result">
SELECT * FROM PRODUCT
<dynamic prepend="WHERE">
<isNotEmpty property="description">
PRD_DESCRIPTION $operator$ #description#
</isNotEmpty>
</dynamic>
</statement>
上面的例子中,参数对象的operator属性将用于替换符号$operator$,假设operator属性等于“like”,description属性等于“%dog%”,生成的SQL语句如下,
SELECT * FROM PRODUCT WHERE PRD_DESCRIPTION LIKE "%dog%"
在复杂动态SQL语句中(即语句中有<dynamic >,<isNotEmpty>等标签,<iterate>标签除外),##中的变量解析之后会被""括起来,作为一个String;
$$中的变量会直接解析;2、在包含iterate的动态语句中,必须使用##,但是不会作为String来处理,而是直接解析变量,例如:
<update id="updateCDNSRVFileStatus" >
update #tableName# set STATUS = #status#
<isPropertyAvailable prepend="WHERE" property="videoFileIds" >
FILE_ID IN
<iterate property="videoFileIds" open="(" close=")" conjunction=",">
#videoFileIds[]#
</iterate>
</isPropertyAvailable>
</update>
ibatis中的order by 参数配置问题
今天在写项目的时候,碰到了这个问题,调试了半天都没搞定。最后把问题锁定到xml配置文件上:
一般配置文件都这么写
<select ...>
select * from table where XXX = #valule# order by #value#
</select>
但是由于ibatis在将参数值映射到statement里面时,所以对于 #value# 会解释成 字符串 "value" ,于是我的代码就被解释成
select * from table where XXX = "valule" order by "value"
这样显然不对,所以得换个方法
<select ...>select * from table where XXX = #valule# order by $value$</select>
用$$来包含order by的参数,就OK了~因为$$内的value不会被解释成"value",而是直接原样翻译。
总结:如果要考虑数据类型,用#;若是只考虑字符,则用$.
相关文章推荐
- Ibatis中#和$两个符号的使用区别
- AngularJS1.x学习(directive 中‘& ’‘=’ ‘@’符号的区别使用)
- 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
- 无符号数(unsigned) 和带符号数(int)的循环变量 在for循环条件判断使用中的区别1例
- ibatis中井号跟美元符号区别(#、$)
- 41-知识补充(UIPickerView的补充方法,使用self创建对象的好处,id和instancetype区别,KVC底层代码实现,文本框的两个代理方法)
- static_cast和reinterpret_cast这两个操作符有什么区别,应该怎么使用这两个操作符
- 在数组合并的时候能够使用两个函数,两者的区别是什么?
- [转]ibatis中井号跟美元符号区别(#、$)
- 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
- PHP中两个数组合并可以使用+或者array_merge 区别
- xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)
- ibatis中井号跟美元符号区别(#、$)
- ibatis #和$符号的区别,传入字符串而不加引号
- ibatis中的resultClass,parameterClass,resultMap,resultType的使用与区别
- ibatis中的resultClass,parameterClass,resultMap,resultType的使用与区别
- 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
- 不使用临时变量交换两个无符号 正数a和b的值
- 《剑指offer》-求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
- PHP数组键值使用单引号和双引号和无符号的区别