<MyBatis>MyBatis把空字符串转换成了0的问题处理方案

先看问题:
Postman入参:
<MyBatis>MyBatis把空字符串转换成了0的问题处理方案_第1张图片
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);
    }
    

测试:
入参:
<MyBatis>MyBatis把空字符串转换成了0的问题处理方案_第2张图片
数据库:
在这里插入图片描述
OK , 问题解决 !
实际开发中,可将此方法抽取为公共函数,所有用到的地方可以统一处理 !

你可能感兴趣的:(MyBatis,ListMap,mybatis,oracle,lua)