官方文档中为foreach提供的示例是select的时候循环拼接IN语句,并没有对foreach中的每个属性进行解释,通过其他文章(http://my.oschina.net/linuxred/blog/38802)对各个属性有了部分了解,但是里面没有提到如果传入的参数不只是提供给foreach的时候该怎么做,我正好遇到这个需求,需要批量插入数据,其中product_id是每次都一样的,每次不同的数据为bookCity,通过测试后通过将数据封装成Map解决了问题:
Map<String, Object> parames = new HashMap<String, Object>();
parames.put("product_id", product_id);//product_id是一个String
parames.put("cityArr", cityArr);//cityArr是一个String[]
sqlSession.insert("com.lantu.mybatis.product.addBookCity", parames);
XML:
<insert id="addBookCity" parameterType="HashMap">
INSERT INTO lt_product_city (product_id, city_id) VALUES
<foreach collection="cityArr" item="bookCity" index="index" separator=",">
(#{product_id}, #{bookCity})
</foreach>
</insert>
其中collection中需要配置为HashMap中的key