Mybatis-Plus はフィールドを null に設定します

Mybatis-Plus はフィールドを null に設定します

プロジェクトのシナリオ:

最近、要件を作成するときに、データベースの特定のフィールドを空に設定する必要があります

問題の説明:

コードでは、set メソッドを使用してフィールドを null に設定しましたが、機能しないことがわかりました。

原因分析:

クエリ後、これは Mybatis-Plus のデフォルトの更新戦略設定が原因です。Mybatis-Plus の FieldStrategy には 3 つの戦略があります。

  • IGNORED : 無視されます。属性が設定されているかどうかに関係なく、すべてのフィールドが挿入ステートメントで設定され、値が設定されていない場合は null に更新されます。
  • NOT_NULL : NULL ではありません。デフォルトの戦略です。つまり、null フィールドは無視され、「」は無視されません。
  • NOT_EMPTY : 空ではありません。null の場合、空の文字列の場合は無視されます。つまり、設定値が null の場合はデータベースに挿入されません。

デフォルトは ですNOT_NULL。つまり、null フィールドは無視されるため、更新は失敗します。

解決:

FieldStrategy 戦略は、次の 3 つの方法で調整する必要があります。

方法 1: グローバル認証戦略を次のように調整します。

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  typeAliasesPackage: com.test.application.test.admin.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 0
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #数据库大写下划线转换
    #capital-mode: true
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

方法 2: [推奨] フィールド検証の注釈を調整する

Mybatis-Plus バージョン 3.1.2 以降の場合、特定の状況に応じて、フィールドが空でないことを確認するなど、更新する必要があるフィールドの検証アノテーションを調整します。

@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
private String name;

或者单个的例子:

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String username;

方法 3: UpdateWrapper (3.x) を使用する

更新または挿入操作には次のメソッドを使用します。

//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)
);

おすすめ

転載: blog.csdn.net/weixin_45285213/article/details/128861021