有个需求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中获取值?