今日按需求在mapper.xml中修改完一條sql的條件,感覺很輕松,如下所示:
<if test="companyId != null and companyId !='' ">
<if test="companyFlag == '1'">
AND COMPANY_ID = #{companyId,jdbcType=VARCHAR}
</if>
<if test="companyFlag == '0'">
AND COMPANY_ID != #{companyId,jdbcType=VARCHAR}
</if>
</if>
結(jié)果sql執(zhí)行的結(jié)果卻讓我輕松不起來,明明companyId和companyFlag這兩個(gè)字段不為空,但是在打印的日志sql中卻沒有這個(gè)條件,將上述sql改為如下所示:
<if test="companyId != null and companyId !='' ">
and 1 = 1
<if test="companyFlag == '1'">
AND COMPANY_ID = #{companyId,jdbcType=VARCHAR}
</if>
<if test="companyFlag == '0'">
AND COMPANY_ID != #{companyId,jdbcType=VARCHAR}
</if>
</if>
執(zhí)行sql后發(fā)現(xiàn)日志將and 1 = 1 打印出來了,還是沒有COMPANY_ID這個(gè)條件,于是意識(shí)到是companyFlag的判斷條件出了問題,在網(wǎng)上一頓搜索后,發(fā)現(xiàn)了說明:
mybatis 映射文件中,if標(biāo)簽判斷字符串相等
兩種方式:因?yàn)閙ybatis映射文件,是使用的ognl表達(dá)式,所以在判斷字符串sex變量是否是字符串Y的時(shí)候使用
<test="sex=='Y'.toString()">或者<test = 'sex== "Y"'>
將自己的sql改為:
<if test="companyId != null and companyId !='' ">
<if test="companyFlag == '1'.toString() ">
AND COMPANY_ID = #{companyId,jdbcType=VARCHAR}
</if>
<if test="companyFlag == '0'.toString() ">
AND COMPANY_ID != #{companyId,jdbcType=VARCHAR}
</if>
</if>
再次調(diào)用sql,則條件正??捎昧?。
作者:chengsi101
來源:CSDN
原文:https://blog.csdn.net/chengsi101/article/details/78804224
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!