@テーブル名
@TableId
主キー排他的
たとえば、データ内のテーブルのフィールドは id です。
ただし、エンティティクラスはuserIdです
次に、このアノテーションを userId に付ける必要があります
使用法
主キーマッピング値マッピング主キーフィールド名を設定します
type は主キー タイプの主キー生成戦略を設定します (丸で囲まれたものが重要です)
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 です
次に、このアノテーションを userName に置く必要があります
非主キーフィールド値のマッピングフィールド名のマッピング
「存在」は、それがデータベース フィールドであるかどうかを示します。VO
DTO を実行するとき、データベースにないいくつかのフィールドをクエリすることがよくあります。ラベルが付けられていない場合は、
その後、クエリはエラーを報告します (エンティティ クラスのメンバー フェイスの変更がデータベースに対応するフィールドがない場合は、同じであると見なされます)。
falseに設定する必要があります
select は、このフィールドをクエリするかどうかを示し
、クエリには関与せず、null を返します。
fillは、データを自動的に埋めるかどうかを示します。オブジェクトがデータに保存されると、mybatisplus は特定のフィールドに値を自動的に割り当てます。
アプリケーションシナリオ
作成時間 更新時間
例えば、登録時刻と変更時刻は基本的に各テーブルで使用されるので、時刻を取得して保存する実装となります。
でも迷惑だよ
次に、mp にそれを実行させます (次の構成を採用し、プロセッサを作成する必要があります)
DEFAULT -- デフォルトでは処理されません
INSERT -- 挿入時にフィールドに入力します (初めて追加する場合)。
INSERT_UPDATE --挿入および更新時にフィールドに入力します
(最新の更新とは、挿入と更新の両方が満たされていることを意味します)
UPDATE --更新時にフィールドに入力します
自動入力プロセッサを作成する
テスト
@Version
タグのオプティミスティックなロックメイン変更操作
- データが繰り返し操作されることを防止する
- データのセキュリティを確保するために、2 つのスレッドが同時に同じデータを操作することを防止します。
原理:
オプティミスティック ロックをマークして、バージョン フィールドを通じてデータのセキュリティを確保します。データを変更するときは、
バージョンが条件として使用され、条件が満たされた場合にのみ変更が成功します。
バージョン=1
スレッド 1: 更新 ... バージョン = 1 の場合、バージョン = 2 を設定します
スレッド 2: 更新 ... バージョン = 1 の場合、バージョン = 2 を設定します
説明する:
いずれかのスレッドが正常に動作し、バージョンが 2 に変更されると、他のスレッドは実行に失敗します。
環境設定:
1. デフォルト値 1 を使用してバージョンフィールドをデータベースに追加します。
2. エンティティクラスに version メンバー変数を追加し、 @version を追加します
3.設定クラスの書き込み
テスト
同時に状況を変更します - 興味があれば試してみてください
@EnumValue は
、データベース フィールドをエンティティ クラスの列挙型メンバー変数にマップする一般的な列挙クラス アノテーションです。
認識: 列挙型をメンバー変数に変更してデータベース フィールドにマッピングし、データベース フィールドの値に基づいて列挙型に対応するオブジェクトを検索します。
1.ステータスフィールドをデータベースに追加します
2. 新しい列挙型クラスを作成する
フィールドの追加 - フィールドはデータベース フィールドにマップする必要があることに注意してください
構成ファイル
@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: テナント アノテーション