先看问题:
Postman入参:
MyBatis采用map循环插入:
// Mapper接口层
void addPar(@Param(value = "question") Map<String, Object> paramMap);
<!-- 新增:参数 -->
<insert id="addPar" parameterType="map">
INSERT IGNORE INTO xxx_list_dic
<if test = "null != question and question.size > 0">
<foreach collection="question.entrySet()" index="key" separator="," open="(" close=")">
${key}
</foreach>
VALUES
<foreach collection="question.entrySet()" item="value" separator="," open="(" close=")">
#{value}
</foreach>
</if>
</insert>
数据库数据:
问题: 前台传参dicValueSecond为空字符串,怎么数据库这个字段值变为0了;
原因: 数据库这个字段是int类型,MyBatis会把空字符串转为0 处理;
问题原因清楚了,怎么解决这种问题呢?
方式一: 前台传参处理: 判断如果为空字符串的时候传null;
方式二: 后端处理;
接口层处理:
@Override
public Result addOrModifyConfig(Map<String, Object> paramMap) {
String addOrModify = String.valueOf(paramMap.get("addOrModify"));
if(addOrModify.equals("add")){
paramMap.remove("addOrModify"); // 数据库无该字段,MyBatis采用循环插入数据,需从入参删除数据库没有的字段
// 解决MyBatis传值空字符传转为0的处理:
Iterator<Map.Entry<String, Object>> it = paramMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
String value = String.valueOf(entry.getValue());
if(value.equals("")){
paramMap.put(key,null);
}
}
xxxtMapper.addPar(paramMap);
}
else if(addOrModify.equals("modify")){
xxxMapper.modifyPar(paramMap);
}
return Result.success().result(null);
}
测试:
入参:
数据库:
OK , 问题解决 !
实际开发中,可将此方法抽取为公共函数,所有用到的地方可以统一处理 !