序文
最近、mybatis-plus
あるプロジェクトに取り組んでいるときにupdatById
、このメソッドを使用すると、特定のフィールドを更新するときに問題が発生することがわかりました。一般的な業務操作では、空ではないフィールドを更新することになっていますが、すべてのフィールドが更新されていることがわかりました。これは mybatis-plus global が原因です。更新戦略が原因です。対応するグローバル設定を通じて解決できます。
公式ドキュメントを見ると、クエリ戦略、更新戦略、追加戦略という 3 つのグローバル データベース構成戦略があることがわかります。
公式ドキュメントを入力するにはここをクリックしてください
グローバルデータベースポリシー構成
- 構成
#全局策略
mybatis-plus.global-config.db-config.update-strategy=not_empty
mybatis-plus.global-config.db-config.insert-strategy=not_empty
mybatis-plus.global-config.db-config.select-strategy=not_empty
オプションの構成値については、次のソースコードを参照してください。
package com.baomidou.mybatisplus.annotation;
public enum FieldStrategy {
IGNORED,
NOT_NULL,
NOT_EMPTY,
DEFAULT,
NEVER;
private FieldStrategy() {
}
}
- IGNORED は判定を無視し、すべてのフィールドが更新および挿入されます。
- NOT_NULL は非 NULL 値のみを更新および挿入します
- NOT_EMPTY NULL 以外の値と空ではない文字列のみを更新および挿入します
- 更新や挿入は決して行わないでください
- DEFAULT デフォルト NOT_NULL
デフォルト値はソースコードから確認できます
public static class DbConfig {
private IdType idType;
private String tablePrefix;
private String schema;
private String columnFormat;
private String propertyFormat;
private boolean tableUnderline;
private boolean capitalMode;
private IKeyGenerator keyGenerator;
private String logicDeleteField;
private String logicDeleteValue;
private String logicNotDeleteValue;
private FieldStrategy insertStrategy;
private FieldStrategy updateStrategy;
private FieldStrategy selectStrategy;
public DbConfig() {
this.idType = IdType.ASSIGN_ID;
this.tableUnderline = true;
this.capitalMode = false;
this.logicDeleteValue = "1";
this.logicNotDeleteValue = "0";
this.insertStrategy = FieldStrategy.NOT_NULL;
this.updateStrategy = FieldStrategy.NOT_NULL;
this.selectStrategy = FieldStrategy.NOT_NULL;
}
デフォルト値の構成は NOT_NULL です
ポリシー構成を更新する
つまり、updateById()
このメソッドを使用する場合、更新戦略が指定されていない場合はデフォルトの戦略を使用しますNOT_NULL
。
つまり、オブジェクトフィールドが空の文字列の場合、NULL
セット更新は実行されませんが、フィールドが空の文字列の場合、セット更新操作が実行されます。
したがって、グローバル設定が空でないnot_empty
場合に更新されるように変更できます。
mybatis-plus.global-config.db-config.update-strategy=not_empty
必須フィールドでフィールド更新戦略を個別に指定することもできます。
/**
* 用户类型
*/
@TableField(value = "ADMIN_TYPE_ID",updateStrategy = FieldStrategy.NOT_EMPTY)
private String userType;
または次のようにUpdateWrapper
置き換えることができますupdateById
ポリシーの追加
同様に、inser
またはsave
を実行するときに更新戦略を指定しない場合は、デフォルトの戦略を使用しますNOT_NULL
。
つまり、オブジェクトフィールドが空文字列の場合、NULL
ins 値は追加されませんが、フィールドが空文字列の場合、値は追加されます。
追加する他の戦略を指定することもできます