问题描述
日常开发过程中 使用了自动生成的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
原因探究
根据查阅了相关资料并探究源码发现
- mybatis-plus底层会把xxx != '' 和 xxx != null带入字段属性的判断
- 当数据类型为Integer或者Long时 ''会被转变为0判断 即 xxx != 0
- 但此时传入的字段值为0 所以if条件不通过 if标签内的字段不会被拼接
- 不会拼接意味着该字段不会更新
建议
-
数据库字段的数值类型尽量从1开始 不从0开始
-
标签内的判断针对数值类型不要加 xxx != ''这个判断 只需要用 xxx != null