在開發使用mybatis foreach根據Map集合動態生產sql時出現參數值爲空問題sql
源代碼:mybatis
<foreach collection="condition.keySet()" item="k" separator="and"> ${k} = #{condition[${k}]} </foreach>
結果:編碼
2016-08-12 16:44:16.671 [main] DEBUG c.i.ice.mes.dao.ScriptsDao.total - ==> Preparing: select count(*) from sys_order where batchid = ? and taskid = ? 2016-08-12 16:44:16.707 [main] DEBUG c.i.ice.mes.dao.ScriptsDao.total - ==> Parameters: 10(Integer), null
由上運行結果可得map第二個值爲空,實際非空爲什麼沒法解析map值,跟蹤源碼最後發現DynamicSqlSource getBoundSql時生成context時解析出現問題。能夠看到從condition中取值的key自己爲taskid,卻被解析成tas_frch_k_lid因此在BoundSql時沒法獲取值。緣由是item=k內部解析時將taskid中的k替換成內部編碼code
解決:xml
<foreach collection="condition.entrySet()" item="item" separator="and"> ${item.key} = #{item.value]} </foreach>
注意:mybatis中${}:將解析具體值;#{}:將替換爲?佔位符ip