Ibatis动态sql语句
今天下午,一哥们问下图这段代码啥意思。很少用到这种的,后来也是一直在用myBatis,就更不用这种方式了。下面看一下这段代码!
dynamic 它也是有prepend属性的,为什么这里没有写呢?因为他上面已经写了固定where条件(我个人就比较喜欢加where 1=1,无论有木有条件我就先加一个,之后有条件我就and。),在这呢就不能在写where了对吧。省略prepend属性
dynamic可以去除第一个prepend=”and”中的字符(这里为and) 下面举个栗子
xml代码:
select * from Person
<dynamic prepend="where"> <isNotNull property="name" prepend="and"> name=#name# </isNotNull> <isNotNull property="sex" prepend="and"> sex=#sex# </isNotNull> </dynamic>
运行结果:
当name、sex都非null时打出如下的sql语句:select Person where (and) name= ? , and sex= ?
看到上面这个栗子dynamic就一目了然。下面介绍isNotNull,再举个isNotNull的梨子,请看如下梨子:
<select id="getCustomerRegNum" resultClass="int" parameterClass="QueryCustomerCondition">
select count(cus_id) from cus_customer_tbl
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="lct">
( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%$lct$%')
</isNotNull>
<isNotNull prepend="AND" property="lwh">
( CUS_CUSTOMER_TBL.CUS_WEB_AGENT LIKE '%$lwh$%')
</isNotNull>
</dynamic>
</select>
当值传入参数 lct而不传入 lwh时,产生的SQL语句为:
select count(cus_id) from cus_customer_tbl WHERE ( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%我是参数%') AND (CUS_CUSTOMER_TBL.CUS_WEB_AGENT LIKE '%%')
看到上面这个梨子isNotNull
就一目了然。下面介绍isNotEmpty,再举个isNotEmpty的荔枝,请看如下荔枝
:
<select id="getCustomerRegNum" resultClass="int" parameterClass="QueryCustomerCondition">
select count(cus_id) from cus_customer_tbl
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="lct">
( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%$lct$%')
</isNotEmpty>
<isNotEmpty prepend="AND" property="lwh">
( CUS_CUSTOMER_TBL.CUS_WEB_AGENT LIKE '%$lwh$%')
</isNotEmpty>
</dynamic>
</select>
同样,当值传入参数 lct 而不传入 lwh时,产生的SQL语句为:
select count(cus_id) from cus_customer_tbl WHERE ( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%我是参数%')
那哥们给我发的截图并没有isNotEmpty
,在这里我为什么要介绍一下这两者的区别呢?我之前一直用isNotEmpty
,刚看到截图的时候,竟然误以为是isNotEmpty
,然后我就去百度了一下isNotNull,握了棵草!握了棵草!
握了棵草!
果然还是有区别的。ok,看完栗子、梨子还有荔枝上面的截图代码的意思应该就一目了然了。