近期做項目碰到了一個奇怪的問題,大概的需求是這樣的:
pc端在根據狀態值查詢的時候,當選擇狀態值爲0的時候,導致了mybatis 裏sql 狀態值判斷失效,最終走了全查。
原sql:
<select id="selectListByParamFromWeb" resultMap="roadShowResultMap" parameterType="java.util.Map">
SELECT * FROM ROAD_SHOW WHERE 1=1
<if test="keyword!=null and keyword!=''">
AND SHOW_NAME LIKE '%'||#{keyword}||'%'
</if>
<if test="showStatus!=null and showStatus!='' and showStatus!=-1">
AND SHOW_STATUS=#{showStatus}
</if>
ORDER BY UPDATE_DATE DESC, CREATE_DATE DESC
</select>
後面諮詢了同事,也在網上搜尋了許久相關資料,最後驗證發現,是【showStatus !=''】這一句搞的鬼,因爲在mybatis中,當【showStatus !=''】時,如果傳入 的showStatus值爲0,判斷返回的也是 true,所以最後的解決方法是,把【showStatus !=''】這一句去掉就可了。
修改後sql:
<select id="selectListByParamFromWeb" resultMap="roadShowResultMap" parameterType="java.util.Map">
SELECT * FROM ROAD_SHOW WHERE 1=1
<if test="keyword!=null and keyword!=''">
AND SHOW_NAME LIKE '%'||#{keyword}||'%'
</if>
<if test="showStatus!=null and showStatus!=-1">
AND SHOW_STATUS=#{showStatus}
</if>
ORDER BY UPDATE_DATE DESC, CREATE_DATE DESC
</select>
希望後來的碼友們碰到這個問題時,看到這文篇時,能提供給到一些解決思路,如果能幫到你,麻煩留下你的贊或評論噢~~
學無止境,生生不息。