有个需求mybatis 插入的时候不知道有哪些字段,需要动态的传入值和字段,
Java code?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Test public void testAddProductGuaranty() { //1 560 50000 2014/10/2 0:00:00 2014/11/1 0:00:00 500000 车况良好 Map<String, Object> productGuaranty = new HashMap<String, Object>(); //这些字段可能是不固定的,只做测试用 productGuaranty.put("product_id", 1); productGuaranty.put("remark", "车况良好"); productGuaranty.put("price", 50000); productGuaranty.put("release_date", new Date()); productGuaranty.put("license_date", new Date()); productGuaranty.put("distance", 50000); productGuaranty.put("car_type", 560); productGuaranty.put("car_id", 1); productGuarantyService.addProductGuaranty(productGuaranty); } |
Java code?
| 1 2 3 4 5 6 7 8 9 | @Override public void addProductGuaranty(Map<String, Object> productGuaranty) { Map<String, Object> params = new HashMap<String, Object>(); //获取动态字段 List<CustomTableFields> customTableFields = configService.getTableFields("product_guaranty"); productGuaranty.put("customTableFields", customTableFields); productGuarantyDao.insert(productGuaranty); } |
SQL code?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <insert id="insert" parameterType="java.util.Map" statementType="STATEMENT" > insert into product_guaranty <foreach item="item" collection="customTableFields" open="(" separator="," close=")"> ${item.fieldName} </foreach> values <foreach item="item" collection="customTableFields" open="(" separator="," close=")"> <choose> <when test="item.type == 'date'"> ${item.fieldName} </when> <when test="item.type == 'int'"> ${item.fieldName} </when> <when test="item.type == 'float'"> ${item.fieldName} </when> <otherwise> ${item.fieldName} </otherwise> </choose> </foreach> </insert> |
问题是第二个循环这里如何根据${item.fieldName} 从params中获取值?