LambdaUpdateWrapper<AmzProductPublishSkuAttributeEntity> skuAttrUpdateWrapper = Wrappers.lambdaUpdate(); skuAttrUpdateWrapper.in(AmzProductPublishSkuAttributeEntity::getProductPublishSkuId, skuidList); skuAttrUpdateWrapper.set(AmzProductPublishSkuAttributeEntity::getDelFlag, AmazonProductPublishConstants.DEL_FLAG_DELETED); skuAttributeService.update(skuAttrUpdateWrapper)是在干嘛
时间: 2023-06-10 12:02:49 浏览: 49
LambdaUpdateWrapper<AmzProductPublishSkuAttributeEntity> skuAttrUpdateWrapper = Wrappers.lambdaUpdate();
skuAttrUpdateWrapper.in(AmzProductPublishSkuAttributeEntity::getProductPublishSkuId, skuidList);
skuAttrUpdateWrapper.set(AmzProductPublishSkuAttributeEntity::getDelFlag, AmazonProductPublishConstants.DEL_FLAG_DELETED);
skuAttributeService.update(skuAttrUpdateWrapper) 这段代码是在执行一个数据库操作,使用 LambdaUpdateWrapper 对 AmzProductPublishSkuAttributeEntity 表进行更新操作。具体来说,它将符合 skuidList 列表中的 sku 的 del_flag 属性设置为 AmazonProductPublishConstants.DEL_FLAG_DELETED。
相关问题
LambdaUpdateWrapper<StatTurnoverHour> updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.setSql("turnover = " + (updateWrapper.getSqlSegment().contains("turnover") ? "turnover + " : "") + dto.getMoney()); updateWrapper.setSql("order_num = order_num + " + dto.getOrderNum()); updateWrapper.eq(StatTurnoverHour::getStoreId, dto.getStoreId()); updateWrapper.eq(StatTurnoverHour::getHourTime, dto.getHourTime()); updateWrapper.eq(StatTurnoverHour::getPayTime, dto.getPayTime()); boolean b = this.saveOrUpdate(statTurnoverHour, updateWrapper);解决 BigDecimal 类型字段报错没有默认值的问题,如果turnover为空就取dto.getMoney(),不为空就执行updateWrapper.setSql("turnover = turnover + " + dto.getMoney());
可以尝试如下代码来解决BigDecimal类型字段报错没有默认值的问题:
```
LambdaUpdateWrapper<StatTurnoverHour> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.set(StatTurnoverHour::getTurnover, dto.getMoney(), StringUtils.isNotBlank(dto.getMoney()));
updateWrapper.setSql("order_num = order_num + " + dto.getOrderNum());
updateWrapper.eq(StatTurnoverHour::getStoreId, dto.getStoreId());
updateWrapper.eq(StatTurnoverHour::getHourTime, dto.getHourTime());
updateWrapper.eq(StatTurnoverHour::getPayTime, dto.getPayTime());
boolean b = this.saveOrUpdate(statTurnoverHour, updateWrapper);
```
这里使用 `set` 方法来设置 `turnover` 字段的值,如果 `dto.getMoney()` 不为空,则设置为该值,否则不设置。同时,保留了 `order_num` 字段的更新方式。
StatTurnoverHour statTurnoverHour = new StatTurnoverHour(); statTurnoverHour.setStoreId(dto.getStoreId()); statTurnoverHour.setHourTime(dto.getHourTime()); statTurnoverHour.setPayTime(dto.getPayTime()); statTurnoverHour.setTurnover(dto.getMoney()); statTurnoverHour.setOrderNum(dto.getOrderNum()); LambdaUpdateWrapper<StatTurnoverHour> updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.setSql("turnover = turnover + " + dto.getMoney()); updateWrapper.setSql("order_num = order_num + " + dto.getOrderNum()); updateWrapper.eq(StatTurnoverHour::getStoreId, dto.getStoreId()); updateWrapper.eq(StatTurnoverHour::getHourTime, dto.getHourTime()); updateWrapper.eq(StatTurnoverHour::getPayTime, dto.getPayTime()); boolean b = this.saveOrUpdate(statTurnoverHour, updateWrapper);执行的sql:update stat_turnover_hour set order_num = 1, turnover = 1.00, hour_time = 11, pay_time = TIMESTAMP '2023-05-23 00:00:00.000', storeId = 215, turnover = turnover + 1.00, order_num = order_num + 1 where storeId = 215 and hour_time = 11 and pay_time = TIMESTAMP '2023-05-23 00:00:00.000',怎么让order_num = 1, turnover = 1.00不存在sql
在你的代码中,有两个地方使用了`setSql`方法,这个方法会将整个SQL语句进行替换,因此第一个`setSql`设置的`turnover`字段的更新操作被第二个`setSql`覆盖掉了,最终执行的SQL语句只包含了`order_num`字段的更新操作,没有包含`turnover`字段的更新操作。为了解决这个问题,你可以将这两个更新操作合并成一个,如下所示:
```
LambdaUpdateWrapper<StatTurnoverHour> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.set(StatTurnoverHour::getOrderNum, StatTurnoverHour::getOrderNum.plus(dto.getOrderNum()));
updateWrapper.set(StatTurnoverHour::getTurnover, StatTurnoverHour::getTurnover.plus(dto.getMoney()));
updateWrapper.eq(StatTurnoverHour::getStoreId, dto.getStoreId());
updateWrapper.eq(StatTurnoverHour::getHourTime, dto.getHourTime());
updateWrapper.eq(StatTurnoverHour::getPayTime, dto.getPayTime());
boolean b = this.saveOrUpdate(statTurnoverHour, updateWrapper);
```
这样,`set`方法会将更新操作添加到更新语句中,而不是直接替换整个SQL语句。执行的SQL语句应该是这样的:
```
update stat_turnover_hour
set order_num = order_num + 1.00, turnover = turnover + 1.00
where storeId = 215 and hour_time = 11 and pay_time = TIMESTAMP '2023-05-23 00:00:00.000'
```