作為小猿一枚,記錄一下工作中踩過(guò)的坑寂汇。
今天在修改別人的代碼bug時(shí),有一個(gè)需求是在做導(dǎo)出excel功能時(shí)停巷,mybatis動(dòng)態(tài)構(gòu)建sql語(yǔ)句的時(shí)候,要根據(jù)傳進(jìn)來(lái)的map中的一個(gè)值來(lái)判斷是不是null叠穆,從而需要關(guān)聯(lián)另一張表取得數(shù)據(jù)。
<select id="getFieldsValue" parameterType="java.util.Map" resultType="java.util.HashMap">
SELECT
<foreach collection="colList" item="col" index="index" separator=",">
<if test="optionList[index] != 'null'">
${col}.dic_value as ${col}
</if>
<if test="optionList[index] == 'null'">
${col}
</if>
</foreach>
FROM
${tableName} t
<foreach collection="optionList" item="option" index="index">
<if test="option != 'null'">
left join t_admin_dic_values ${colList[index]} ON t.${colList[index]}=${colList[index]}.id
</if>
</foreach>
WHERE
t.id IN
<foreach collection="recordList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
可以看到SELECT后的<forech>循環(huán)體是colList,由于我傳進(jìn)來(lái)的是一個(gè)Map硼被,這里的optionList[index]用的是colList循環(huán)的角標(biāo)渗磅,但是我一度忘記了optionList存的是String,所以我之前的判斷optionList[index] != null" 一直報(bào)錯(cuò),要加上'null'仔掸。
xml文件 $ 和 # 的區(qū)別
1.${}在預(yù)編的時(shí)候會(huì)直接被變量替換,但是存在被注入的問(wèn)題起暮,表名必須用${},因?yàn)?{}在預(yù)編的時(shí)候會(huì)被解析為负懦?占位符,但當(dāng)被變量替換的時(shí)候會(huì)加上 ‘’單引號(hào)纸厉,表明不允許加單引號(hào)(但是反引號(hào)``是可以的)