Mybatis-plus的一个坑

207 阅读1分钟

问题描述

日常开发过程中 使用了自动生成的mybatis xml文件 一条update语句中包含了这样类似的if标签 <if test="xxx != '' and xxx != null"> xxx = #{xxx} </if> <if test="xxx != '' and xxx != null"> xxx = #{xxx} </if> <if test="xxx != '' and xxx != null"> xxx = #{xxx} </if> 当数据库字段是int或者bigint时 java对象字段设为0 mybatis不会执行字段的update

原因探究

根据查阅了相关资料并探究源码发现

  1. mybatis-plus底层会把xxx != '' 和 xxx != null带入字段属性的判断
  2. 当数据类型为Integer或者Long时 ''会被转变为0判断 即 xxx != 0
  3. 但此时传入的字段值为0 所以if条件不通过 if标签内的字段不会被拼接
  4. 不会拼接意味着该字段不会更新

建议

  • 数据库字段的数值类型尽量从1开始 不从0开始

  • 标签内的判断针对数值类型不要加 xxx != ''这个判断 只需要用 xxx != null