1. 程式人生 > 程式設計 >詳解Mybatis-plus中更新date型別資料遇到的坑

詳解Mybatis-plus中更新date型別資料遇到的坑

最近一年的專案都是在使用Mybatis-plus,感覺挺好用的,也沒遇到很多問題,但是在最近專案上線之後,遇到了一些新的需要,在進行新版本開發的時候就開始遇到坑了,今天來說一下更新資料中有date型別資料的時候會出現的問題。

實體類部分欄位如下:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductPo implements Serializable {
 /**
   * 產品主鍵,自增
   */
  private Long prdId;
  /**
   * 名稱
   */
  private String prdName;
  /**
   * 價格
   */
  private Bigdecimal prdPrice;
  /**
   * 上市日期
   */
  private LocalDate listingDate;
  /**
   * 建立時間
   */
  private LocalDateTime createTime;
  /**
   * 修改時間
   */
  private LocalDateTime updateTime;
}

如果在更新的時候,將上市日期(listingDate)由之前的“2020-07-16”更新為null:

ProductPo po = ProductPo.builder.prdId(request.getPrdId).listingDate(null).updateTime(now(3)).build;

更新語句分為兩種,第一種:

Integer rows = prdMapper.update(po,Wrappers.<ProductPo>lambdaUpdate().eq(ProductPo::getPrdId,request.getPrdId()));

第二種:

Integer rows = prdMapper.updateById(po);

這個時候你會發現,上市日期(listingDate)並沒有被更新為空;有可能是因為在更新的時候,mybatis-plus將date型別為空的時候過濾掉了。

解決方法一:在欄位上面加標籤,不進行空判斷過濾

@TableField(strategy = FieldStrategy.IGNORED)
private LocalDate listingDate;

解決方法二:在yml配置檔案中進行全域性配置

#mybatis-plus mapper包掃描地址
mybatis-plus:
 mapper-locations: classpath*:mapper/*/*.xml,classpath*:mapper/*.xml
 config-location: classpath:/mybatis-config.xml
 global-config:
  db-config:
   field-strategy: ignored

此處是對所有的操作都進行過濾,在官網上還有:insertStrategy,updateStrategy和selectStrategy,可以根據自己需要進行設定。
我個人還是選擇了第一種解決方案,因為進行全域性配置的時候,必須保證每次的傳參都是全的,要不然會將資料置空或者沒有將必填欄位傳值的時候會報錯。

到此這篇關於詳解Mybatis-plus中更新date型別資料遇到的坑的文章就介紹到這了,更多相關Mybatis-plus更新date型別內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!