Mybatis Foreach Map

 在開發使用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

相關文章
相關標籤/搜索