您好,登錄后才能下訂單哦!
小編給大家分享一下mybatis中數(shù)字字符串比對的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
在mybatis開發(fā)過程中有需要在sql中判斷查詢哪張表,如下sql:
SELECT a.tag_name, a.tag_id, count( 0 ) AS base_total FROM mm_dd_body a <if test="tagType!=null and tagType == '0'"> LEFT JOIN ccc AS b ON b.tag_body_id = a.id </if> <if test="tagType!=null and tagType == '1'"> <![CDATA[ left join `vvvv` `b` on CONVERT ( concat( '-', `b`.`mark_rule_key` ) USING utf8mb4 ) REGEXP concat( '(\\(|[[:blank:]]+|-){1,}', `a`.`column_name`, '(>|<|>=|<=|=|[[:blank:]])+' ) AND b.tag_id IN ( SELECT tag_id FROM gggg WHERE product = a.product ) ]]> </if> WHERE a.tag_base_cat = #{tagType} AND a.del = 0
在運行時發(fā)現(xiàn)不管tagType傳什么值都不會進(jìn)入兩個if中, 經(jīng)過分析,'1'是會被轉(zhuǎn)成數(shù)字,所以這里有兩種方案: 方案1:將參數(shù)轉(zhuǎn)為int類型,再進(jìn)行比較
<if test="tagType!=null and tagType == 0 "> LEFT JOIN ccc AS b ON b.tag_body_id = a.id </if>
方案二:將數(shù)字轉(zhuǎn)成字符串,加上.toString(),如下:
<if test="tagType!=null and tagType == '0'.toString()"> LEFT JOIN ccc AS b ON b.tag_body_id = a.id </if>
當(dāng)然上面的設(shè)計本就不是一個好的設(shè)計,違背了單一職責(zé)原則,可以將if判斷剝離成兩個單獨select,然后在業(yè)務(wù)層去判斷是使用哪個,這也是一種好的方案,可以規(guī)避不少坑
看完了這篇文章,相信你對“mybatis中數(shù)字字符串比對的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。