轉載:mybatis踩坑之——foreach循環嵌套if判斷

轉載自:做者:超人有點忙
連接:https://www.jianshu.com/p/1ee41604b5da
來源:簡書java

今天在修改別人的代碼bug時,有一個需求是在作導出excel功能時,mybatis動態構建sql語句的時候,要根據傳進來的map中的一個值來判斷是否是null,從而須要關聯另外一張表取得數據。sql

 1 <select id="getFieldsValue" parameterType="java.util.Map" resultType="java.util.HashMap">
 2  SELECT  3         <foreach collection="colList" item="col" index="index" separator=",">
 4             <if test="optionList[index] != 'null'">
 5  ${col}.dic_value as ${col}  6             </if>
 7             <if test="optionList[index] == 'null'">
 8 
 9  ${col} 10             </if>
11         </foreach>
12 
13  FROM 14  ${tableName} t 15         <foreach collection="optionList" item="option" index="index">
16             <if test="option != 'null'">
17  left join t_admin_dic_values ${colList[index]} ON t.${colList[index]}=${colList[index]}.id 18             </if>
19         </foreach>
20 
21  WHERE 22  t.id IN 23         <foreach collection="recordList" item="item" separator="," open="(" close=")">
24  #{item} 25         </foreach>
26     </select>

能夠看到SELECT後的<forech>循環體是colList,因爲我傳進來的是一個Map,這裏的optionList[index]用的是colList循環的角標,可是我一度忘記了optionList存的是String,因此我以前的判斷optionList[index] != null" 一直報錯,要加上'null'。mybatis

xml文件 $ 和 # 的區別

1.${}在預編的時候會直接被變量替換,可是存在被注入的問題,表名必須用${},由於#{}在預編的時候會被解析爲?佔位符,但當被變量替換的時候會加上 ‘’單引號,代表不容許加單引號(可是反引號``是能夠的)spa

做者:超人有點忙 連接:https://www.jianshu.com/p/1ee41604b5da 來源:簡書
相關文章
相關標籤/搜索