最近项目中遇到一个问题,是关于mybatis-plus的字段注解策略,记录一下。
1问题
调用了A组件(基础组件),来更新自身组件的数据,发现自己组件有个字段总是被清空。
2原因分析
调用的A组件的字段,属于基础字段,自己业务组件,对这个基础字段做了扩展,增加了业务字段。但是在自己的组件中的实体注解上,有一个注解使用错误。
mybatis-plus封装的updateById方法,如果实体类上没有添加策略注解,默认会对null字段加以判断,也就是说,如果传入的字段是null,mybatis-plus不会更新该字段的值。这是mybatis-plus的默认策略(默认对null传参的判断)。
一般想要把一个字段设置成null值,就需要像我上面截图这样,改变默认策略, 在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略null值的判断,也就是说,我就不在判断了,你传参是啥,我就更新成啥,传入了null,我就将该字段更新成null。
3总结
mybatis-plus的实体注解策略有三种:
NOT_NULL:默认策略,非NULL判断(判断传参为null时,不会更新该字段)
IGNORED:忽略判断(不去判断传参是否是null,如果传入null,就更新该字段值为null)
NOT_EMPTY:非空判断(如果传入的参数是“”空字符串或者null,不会插入数据库)
我看到网上有的解释更加直观:
ignored 不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值,全为null,这种在update 操作中会有风险,把有值的更新为null
not_null,也是默认策略,也就是忽略null的字段,不忽略""
not-empty 为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库