mybatis foreach標籤

情景:查詢數據庫中文章的相關文章   文章爲一個表 字段tags爲相關文章字符串中間用','逗號進行啦分割數據庫

查詢完一個文章後能夠把tags字段構造爲一個List<String> 而後利用這個集合做爲條件來查詢app

<select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
 select * from t_news n where
 <foreach collection="listTag" index="index" item="tag" open="("
   separator="," close=")">
  #{tag} in n.tags
 </foreach>
字符串

看。 foreach 生成的效果是集合 轉化爲下面的it

select * from t_news n where ( ? in n.tags , ? in n.tags )io


foreach元素的屬性主要有 item,index,collection,open,separator,close。foreach

item表示集合中每個元素進行迭代時的別名.List

index指 定一個名字,用於表示在迭代過程當中,每次迭代到的位置.select

open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號做爲分隔 符.數據

close表示以什麼結束.查詢

<select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
 select * from t_news n where
 <foreach collection="listTag" index="index" item="tag" open=""
   separator="or" close="">
  #{tag} in n.tags
 </foreach>
</select>
因此 去除左右括號 和 把,改爲 or 進行 。 就能夠轉化爲這種形式。
select * from t_news n where ? in n.tags or ? in n.tags   這樣能夠用List<String> 來查。

可是查不到數據
須要使用以下方式:
<select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
 select * from t_news n where
 <foreach collection="listTag" index="index" item="tag" open=""
   separator="or" close="">
   n.tags like  '%'||#{tag}||'%'
 </foreach>
<lect>

生成的SQL爲

select * from t_news n where n.tags like ? or n.tags like ?

foreach : 用的更多的地方爲: 根據Id批量刪除    /    判斷什麼 in 集合中(此時須要生成(**,***,)的形式)

相關文章
相關標籤/搜索