最近在工作的時候遇到使用mybatis-plus框架遇到一個無法更新空字符串和null的問題,看了很多博客文章,都沒有解決掉,在此記錄一下自己解決方式
xxxx.updateById(user)
一般都是調用 updateById()這個方法導致無法把null或者空字符串更新到數據庫中的。
通過查看mybatis-plus官方的api文檔也記錄了對應的解決方法,一共有三種解決的方法
插入或更新的字段有 空字符串 或者 null
第一種方式,對自己的系統影響有點大,不是很適合,果斷放棄了,沒有使用
第二種方式,是實體類的需要傳入null或者是空字符的屬性中調整驗證注解,但是只加 strategy = FieldStrategy.IGNORED 是不行的,會報錯,是因為沒有指定該字段的jdbcType的類型,加上就可以解決掉
1 @TableField(strategy = FieldStrategy.IGNORED,el = "relationAccId,jdbcType=VARCHAR") 2 private String relationAccId;
第三種方式,mybatis-plus的版本必須3.x以上才可以用,使用UpdateWrapper來更新
//updateAllColumnById(entity) // 全部字段更新: 3.0已經移除 mapper.update( new User().setName("mp").setAge(3), Wrappers.<User>lambdaUpdate() .set(User::getEmail, null) //把email設置成null .eq(User::getId, 2) ); //也可以參考下面這種寫法 mapper.update( null, Wrappers.<User>lambdaUpdate() .set(User::getAge, 3) .set(User::getName, "mp") .set(User::getEmail, null) //把email設置成null .eq(User::getId, 2) );
還是官方API靠譜,遇到問題,可以先到官方網址查查API,可能是個不錯的選擇!