轉載自:做者:超人有點忙
連接: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