4
回答
mybatis动态SQL<if>标签问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

mybatis使用动态SQL中<if>标签使用困惑

<update id="update" parameterType="com.zyt.entity.system.UserEntity">
		UPDATE T_USER 
		<trim prefix="SET" suffixOverrides=",">
			<if test="nickname!=null and nickname!=''">
				nickname = #{nickname, jdbcType=VARCHAR},
			</if>
			<if test="head!=null and head!=''">
				head = #{head, jdbcType=VARCHAR},
			</if>
			<if test="name!=null and name!=''">
				name = #{name, jdbcType=VARCHAR},
			</if>
			<if test="age!=null and age!='' or age==0">
				AGE = #{age, jdbcType=INTEGER},
			</if>
			<if test="sex!=null and sex!=''">
				SEX = #{sex, jdbcType=VARCHAR},
			</if>
		</trim>
		WHERE ID = #{id, jdbcType=INTEGER}
	</update>



这是之前Mapper里面写的内容

public ApiResult update(UserEntity entity)
  {
    ApiResult apiResult = new ApiResult(ApiStatus.FAILED, "操作失败");
    if (this.userMapper.update(entity) > 0)
    {
      if (!StrKit.isBlank(entity.getNickname())) {
        this.chatManager.modifyNickname(String.valueOf(entity.getId()), 
          entity.getNickname());
      }
      this.userMapper.update(entity);
      apiResult.setResult(ApiStatus.SUCCESS);
      apiResult.setMsg("操作");
    }
    return apiResult;
  }
}



这是Manager里面的内容

//上传头像通用接口
  @ResponseBody
  @RequestMapping(value={"/upload_head"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
  public ApiResult uploadHead(HttpServletRequest request, @RequestParam int userid, @RequestParam MultipartFile head)
  {
    ApiResult apiResult = new ApiResult(ApiStatus.FAILED);
    String path = UploadKit.uploadHead(request, String.valueOf(userid), 
      head);
    if (!StrKit.isBlank(path))
    {
      UserEntity entity = new UserEntity();
      entity.setId(userid);
      entity.setHead(path);
      this.userManager.update(entity);
      apiResult.setResult(ApiStatus.SUCCESS);
      apiResult.setMsg(entity.getHead());
    }
    else
    {
      apiResult.setMsg("上传出错");
    }
    return apiResult;
  }
}



这是Controller的内容


问题就是:使用这种Mapper的方法,前端只传了status字段 ,数据库这边会同时更改Age字段内容,变为0

解决问题:更改了Mapper

<if test="age!=null and age!='' or age==0">
				AGE = #{age, jdbcType=INTEGER},
			</if>

<if test="age!=null and age!=''">
				AGE = #{age, jdbcType=INTEGER},
			</if>
将if test里面的判断or age==0就可以了.

请问这是为什么?我的想法是age是int类型,加个判断为不0

为什么加上or判断,会在更新时把age字段设置为0.


举报
aijfanta
发帖于2年前 4回/7K+阅
顶部