您的位置:首页 > 其它

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",而是直接原样翻译。

总结:如果要考虑数据类型,用#;若是只考虑字符,则用$.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐