共有三种常用解决方案
- 方案一:修改全局更新策略(不推荐)
- 方案二:修改指定字段的更新策略(不推荐)
- 方案三:使用LambdaUpdateWrapper只在特定需求下做处理(推荐)
方案一:修改全局更新策略(不推荐)
mybatis-plus:global-config:#字段策略 IGNORED:"忽略判断"、NOT_NULL:"非NULL判断"、NOT_EMPTY:"非空判断"field-strategy: IGNORED
不推荐使用原因:作用范围太广,调用MyBatis-Plus封装的update会不经意将字段改为空
方案二:修改指定字段的更新策略(不推荐)
@TableField(strategy = FieldStrategy.IGNORED)private String name;
不推荐使用原因:相对于方案一作用范围相对较小,但调用MyBatis-Plus封装的update也会不经意将字段改为空
方案三:使用LambdaUpdateWrapper只在特定需求下做处理(推荐)
Order order = new Order();order.setId(1);order.setPrice(3.8)order.setName(null)LambdaUpdateWrapper<Order> lambdaUpdate = Wrappers.lambdaUpdate();//构建where条件根据id修改lambdaUpdate.eq(Order::getId, order.getId()); //name属性为空时可以修改字段为NULLif (StringUtils.isEmpty(order.getName())) lambdaUpdate.set(Order::getName, null); //此时生成的SQL语句为update order set price = 3.8, name = null where id = 1super.update(order, lambdaUpdate);
推荐原因:不影响任何地方只在此处生效