ibatis and 未被拼接上的问题

 

ibatis中,

<dynamic prepend="WHERE">

<isNotNull property="deviceId" prepend="AND"> tdi.deviceId = #deviceId# </isNotNull>

</dynamic>

<dynamic>元素划分出SQL语句的动态部分,动态部分可以包含任意多的条件标签元素,条件标签决定是否在语句中包含其中的SQL代码。所有的条件标签元素将根据传给动态查询Statement的参数对象的情况来工作。<dynamic>元素和条件元素都有"prepend"属性,它是动态SQL代码的一部分,在必要情况下,可以被父元素的"prepend"属性覆盖。"prepend"属性"where"将覆盖第一个为"真"的条件元素,这对于确保生成正确的SQL语句是有必要的。 例如:在第一个为"真"的条件元素中,"AND"是不需要的。

例如:

<dynamic prepend="WHERE">

<![CDATA[

tam.signalCode <> 0 

]]>

<isNotNull property="sureStatusList" prepend="AND "> tam.sureStatus IN(

    <iterate property="sureStatusList" conjunction=",">#sureStatusList[]#</iterate>)

    </isNotNull>

</dynamic>

由于"prepend"属性"where"将覆盖第一个为"真"的条件元素,因此拼接之后的sql为:

"WHERE tam.signalCode <> 0 tam.sureStatus IN()",很明显拼接之后的sql是不对的。

正确的写法为:

 

WHERE 1 = 1 

<dynamic>

<![CDATA[

AND tam.signalCode <> 0 

]]>

<isNotNull property="sureStatusList" prepend="AND "> tam.sureStatus IN(

    <iterate property="sureStatusList" conjunction=",">#sureStatusList[]#</iterate>)

 </isNotNull>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值