MyBatis-Plus の一般的なアノテーションの詳細な説明

@テーブル名

abb436bf7018e2b45cbe9879d1f34da6.png

@TableId
主キー排他的

たとえば、データ内のテーブルのフィールドは id です。

ただし、エンティティクラスはuserIdです

次に、このアノテーションを userId に付ける必要があります

使用法

主キーマッピング値マッピング主キーフィールド名を設定します

type は主キー タイプの主キー生成戦略を設定します (丸で囲まれたものが重要です)

8d46e6c6d9fc4626f8290dd269036b85.png

f9bd61c7e0bac5058fdc42408c133b51.png

1. データベースの自動インクリメント AUTO。
開発者は値を割り当てる必要はありません。現在のテーブルの最大 ID 値に基づいて +1 が自動的にインクリメントされます。

値を手動で割り当てる場合でも、データベース ID の最大値 + 1 を使用して ID を割り当てる必要があります。


2 スノーフレークアルゴリズムを使用して主キーを自動生成する NONE.
新規追加で使用する場合は主キーの長さに注意する必要がありますが、3.20 ではこのフィールドの最大値 + 1 が採用されます。

1.データ型をintからlongに変更します。

2. データベーステーブルの長さを変更する必要がある

生成された長さに注意する必要があります。そうでない場合は、エラーが報告されます。

原因: org.apache.ibatis.reflection.ReflectionException:  値 '1289924709438889985' を持つ 'class com.lin.mybatisplus.pojo.User' のプロパティ 'id' を設定できませんでした 原因: java.lang.IllegalArgumentException: 引数
 の  型が一致しません保存する前に、データ型を変更する必要もあります。



3 開発者は手動で INPUT を割り当てます。
挿入操作中に ID に値が割り当てられなかった場合、データベースに格納される値は 0 (長整数) になります。

データベースは通常、ID を自動インクリメントする方法を使用して、現在のデータベース番号 + 1 の値を処理します。

値が指定されている場合は、指定された値を使用します


4 ASSIGN_ID
は ID_WORKER(3)、ID_WORKER STR(3)、

mpを使用して値を自動的に割り当てるにはスノーフレークアルゴリズムが使用されますが、3.20ではフィールドの最大値+1が使用されます。

5 ASSIGN_ID は
UUID と同等です

主キーの型は文字列型である必要があり、UUID が自動的に生成されて割り当てられます。

データベースのフィールド設計を考慮する必要があります。データベース内の int 型は保存できませんが、主キーはオートインクリメントされるため、int 型を varchar 型に変更したい場合は、主キーを削除する必要があります自動増加。

@TableField
非主キー フィールドの使用法

たとえば、データ内のテーブルのフィールドは name です。

ただし、エンティティクラスは userName です

3c2a34ae327a164fa0f94d476722e1ef.png

次に、このアノテーションを userName に置く必要があります


非主キーフィールド値のマッピングフィールド名のマッピング

「存在」は、それがデータベース フィールドであるかどうかを示します。VO
DTO を実行するとき、データベースにないいくつかのフィールドをクエリすることがよくあります。ラベルが付けられていない場合は、

4d56078ee21c9c9624673e147ea402eb.png

その後、クエリはエラーを報告します (エンティティ クラスのメンバー フェイスの変更がデータベースに対応するフィールドがない場合は、同じであると見なされます)。

falseに設定する必要があります


select は、このフィールドをクエリするかどうかを示し
、クエリには関与せず、null を返します。

2239b8ef52590d7659c2f5198a031d51.png


fillは、データを自動的に埋めるかどうかを示します。オブジェクトがデータに保存されると、mybatisplus は特定のフィールドに値を自動的に割り当てます。

7a2dc0c6a9d40b27a36b67b5a5c1b48b.png

アプリケーションシナリオ

作成時間 更新時間

例えば、登録時刻と変更時刻は基本的に各テーブルで使用されるので、時刻を取得して保存する実装となります。

でも迷惑だよ

次に、mp にそれを実行させます (次の構成を採用し、プロセッサを作成する必要があります)


DEFAULT -- デフォルトでは処理されません

INSERT -- 挿入時にフィールドに入力します (初めて追加する場合)。

INSERT_UPDATE --挿入および更新時にフィールドに入力します

(最新の更新とは、挿入と更新の両方が満たされていることを意味します)

UPDATE --更新時にフィールドに入力します

c758820ba62330fc63df75cc86180d05.png
自動入力プロセッサを作成する

35271fc1ebe813d8d9bfd69b98b5a708.png
テスト


@Version
タグのオプティミスティックなロックメイン変更操作

- データが繰り返し操作されることを防止する

- データのセキュリティを確保するために、2 つのスレッドが同時に同じデータを操作することを防止します。

原理:

オプティミスティック ロックをマークして、バージョン フィールドを通じてデータのセキュリティを確保します。データを変更するときは、

バージョンが条件として使用され、条件が満たされた場合にのみ変更が成功します。

バージョン=1

スレッド 1: 更新 ... バージョン = 1 の場合、バージョン = 2 を設定します

スレッド 2: 更新 ... バージョン = 1 の場合、バージョン = 2 を設定します

説明する:

いずれかのスレッドが正常に動作し、バージョンが 2 に変更されると、他のスレッドは実行に失敗します。

環境設定:

1. デフォルト値 1 を使用してバージョンフィールドをデータベースに追加します。

eaca6eb425a8eb608fa9e2103ad90ac7.png
2. エンティティクラスに version メンバー変数を追加し、 @version を追加します

b2ebf3887b42c71a0bcba7e4b7a90b16.png
3.設定クラスの書き込み

e2465166af969ac4037088ae81bf384f.png

テスト

13122c0d004e9270eb557f76e9dee5ed.png

同時に状況を変更します - 興味があれば試してみてください


@EnumValue は
、データベース フィールドをエンティティ クラスの列挙型メンバー変数にマップする一般的な列挙クラス アノテーションです。

認識: 列挙型をメンバー変数に変更してデータベース フィールドにマッピングし、データベース フィールドの値に基づいて列挙型に対応するオブジェクトを検索します。

1.ステータスフィールドをデータベースに追加します

56c31d15c6c4dd7b2937974198f0e04c.png
2. 新しい列挙型クラスを作成する

65cd92dbe0d610c086c7e477bd7f4b25.png
フィールドの追加 - フィールドはデータベース フィールドにマップする必要があることに注意してください


構成ファイル
@TableLogicで列挙型パッケージのスキャンを構成します

地図の墓石

よく使用される注釈
@TableName: データテーブル名に注釈を付けます

@TableId: テーブルの主キー識別子

@TableId(value = “id”, type = IdType.AUTO):自增

@TableId(value = “id”, type = IdType.ID_WORKER_STR): 分散グローバル固有 ID 文字列型

@TableId(value = “id”, type = IdType.INPUT): 自分で入力します

@TableId(value = “id”, type = IdType.ID_WORKER): 分散グローバル一意ID長整数型

@TableId(value = “id”, type = IdType.UUID): 32 ビット UUID 文字列

@TableId(値 = “id”、タイプ = IdType.NONE): ステートレス

@TableField: テーブルフィールド識別子

@TableField(exist = false): 属性はデータベース テーブル フィールドではないが、使用する必要があることを示します。

@TableField(exist = true): プロパティがデータベース テーブル フィールドであることを示します。

@TableField(condition = SqlCondition.LIKE): このプロパティがあいまい検索できることを示します。

@TableField(fill = FieldFill.INSERT): fill フィールドに注釈を付けると、ジェネレーター戦略部分も構成できます。

@フィールド戦略:

@FieldFill

@Version: オプティミスティックロックのアノテーションとタグ

@EnumValue: 列挙型クラスのアノテーションを渡す

@TableLogic:テーブルフィールドの論理処理アノテーション(論理削除)

@SqlParser: テナント アノテーション
 

おすすめ

転載: blog.csdn.net/qq_43012298/article/details/118362066