有個需求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中獲取值?