本篇內容介紹了“mybatis使用foreach查詢不出結果也不報錯的問題怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
首先,執行的時候語法沒有報錯,其次sql語句拿到數據庫去執行能查到數據,但是在接口這邊返回空輸數據,查看控制臺發現sql語句執行了,但是返回結果為0。此時猜想是傳入參數的問題。
此時數組是直接從參數里接收
仔細看此時的數組和普通的數組還是有差別的
但是此時執行是沒有問題的,但是查不到數據
此時的數組
遍歷輸出
所以,由此可以看出是參數的問題
由于接收到的數組是json數組,不能直接使用,要轉成普通數組即可
前端傳入參數(數組即可)
mybatis語法掌握不熟,在寫foreach操作時,造成in ()錯誤,這種情況不符合SQL的語法,導致程序報錯。
如果簡單只做非空判斷,這樣也有可能會有問題:本來in一個空列表,應該是沒有數據才對,卻變成了獲取全部數據!
<select id="getActiveCount" resultType="int" parameterType="com.missfresh.active.dto.ActiveSearchDTO"> select count(1) from ( SELECT distinct a.* FROM active AS a <if test="sku!='' and sku!=null"> LEFT JOIN active_promotion AS ap ON ap.active_id = a.id LEFT JOIN promotion_product AS pp ON pp.promotion_id = ap.promotion_id </if> <if test="areaIds!='' and areaIds!=null"> LEFT JOIN active_area AS aa ON aa.active_id = a.id and aa.status = 1 and aa.area_type = 0 </if> WHERE a.status <![CDATA[!= ]]> 0 <if test="id!=0 and id!=null"> AND a.id = #{id} </if> <if test="name!='' and name!=null"> AND a.name LIKE CONCAT('%',#{name},'%') </if> <if test="sku!='' and sku!=null"> AND pp.sku = #{sku} </if> <!--判斷方式錯了,應該先用null再用size>0判斷;如果areaIds為空,查詢結果也應為空,而不是其他查詢結果。所以sql有問題--> <if test="areaIds!='' and areaIds!=null"> and aa.area_id IN <foreach item="item" index="index" collection="areaIds" open="(" separator="," close=")"> #{item} </foreach> </if> order by a.create_time desc ) as b </select>
<select id="getActiveCount" resultType="int" parameterType="com.missfresh.active.dto.ActiveSearchDTO"> select count(1) from ( SELECT distinct a.* FROM active AS a <if test="sku!='' and sku!=null"> LEFT JOIN active_promotion AS ap ON ap.active_id = a.id LEFT JOIN promotion_product AS pp ON pp.promotion_id = ap.promotion_id </if> <if test="areaIds!='' and areaIds!=null"> LEFT JOIN active_area AS aa ON aa.active_id = a.id and aa.status = 1 and aa.area_type = 0 </if> WHERE a.status <![CDATA[!= ]]> 0 <if test="id!=0 and id!=null"> AND a.id = #{id} </if> <if test="name!='' and name!=null"> AND a.name LIKE CONCAT('%',#{name},'%') </if> <if test="sku!='' and sku!=null"> AND pp.sku = #{sku} </if> <if test="areaIds!=null and areaIds.size > 0"> and aa.area_id IN <foreach item="item" index="index" collection="areaIds" open="(" separator="," close=")"> #{item} </foreach> </if> <!--加入這個非真條件--> <if test="areaIds==null or areaIds.size == 0"> and 1=0 </if> order by a.create_time desc ) as b </select>
“mybatis使用foreach查詢不出結果也不報錯的問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。