1. 程式人生 > 程式設計 >Mybatis中foreach標籤帶來的空格\換行\回車問題及解決方案

Mybatis中foreach標籤帶來的空格\換行\回車問題及解決方案

原因

在自已做的內容中通過獲取多個商品Id,以此來獲取多個商品詳細資訊。但資料庫返回的商品資訊的順序與原來List中產品的id順序並不匹配,這就導致了前端頁面商品的資訊顯示混亂,不匹配。
通過網上找到order by排序可以有效解決這個問題,返回與查詢時的產品id順序一致。還有一點,List時有序的

這裡先附帶上這個sql語句(只能在資料庫中成功)

select prod_id,prod_name,price,`describe`,prod_date,prod_pic,integral,Prod_detail from product_info
where prod_id in('sayx0420','smxj0420','flpd0420','snxj0420' )
order by 
instr(',sayx0420,smxj0420,flpd0420,snxj0420',CONCAT(',',prod_id,')) 

想了解instr()的小夥伴可以自已去查詢相關內容

進入主題

如何在Mybatis的XML中寫出這樣的效果!

select <foreach collection="list" open="'," close=",'" separator="," item="prodId" >
${prodId}
</foreach>

上面的查詢語句返回的輸出資訊

one

因為空格,回車與換行的原因這樣達不到下面程式碼的效果instr(','))

解決

思路:替換圖片內的回車,換行與空格為單引號
ASCII碼
char(10) 換行
char(13) 回車
解決:用sql的replace方法去替換

 select  replace(replace(replace(
<foreach collection="list" open="'," item="prodId" >
${prodId}
</foreach>,char(13),''),char(10),' ','')

再次呼叫此方法,顯示以下結果

結果

附帶上原始碼

<select id="selectByProdIds" resultMap="BaseResultMap" parameterType="java.util.List">
    select prod_id,Prod_detail
    from product_info
    where prod_id
    <foreach collection="list" separator="," open="in(" close=")" item="prodId">
      #{prodId}
    </foreach>
    order by
    instr(replace(replace(replace(
    <foreach collection="list" open="'," item="prodId" >
      ${prodId}
    </foreach>,`prod_id`,'))
  </select>

完整結果

不加Order By排序的結果

mysql圖片

結語

  • 用了三個連續的replace方法,可讀性差,不美觀
  • 雖然解決Fooeach的標籤的問題,但還是沒能較好的解決開始的問題
  • 如果有想法的小夥伴可以在下面留言告訴我。

到此這篇關於Mybatis中foreach標籤帶來的空格\換行\回車問題及解決方案的文章就介紹到這了,更多相關Mybatis foreach標籤內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!