高度な機能
Mybatis-Mate は、MyBatis-Plus 対して提供されるエンタープライズ向けモジュールであり、データをより迅速かつ優雅に処理することを目的としています。
- 使用例 :ポータル
- 作者に連絡して確認を取ったうえで、WeChat公式アカウントで Mybatis-Mate を紹介する記事を投稿すれば、永久個人ライセンス証明書を無料で取得できます。
- このモジュールは MyBatis-Plus の拡張ライブラリに属しており、有料版の MyBatis-Plus ではありません。すべての問題は
青苗
個人の責任となります。
無料動画チュートリアル 青苗による制作、品質保証付き
データ監査(照合)
- 使用例:👉 mybatis-mate-audit
- 2つのオブジェクトのプロパティの差異を比較します。例:銀行の取引明細の照合作業。
// 1,异步回调,注意 @EnableAsync 开启异步applicationEventPublisher.publishEvent(new DataAuditEvent((t) -> {List<Change> changes = t.apply(newVersion, oldVersion);for (Change valueChange : changes) {ValueChange change = (ValueChange) valueChange;System.err.println(String.format("%s一致しません。正しい値 %s 実際の値 %s", change.getPropertyName(), change.getLeft(), change.getRight()));}}));// 2,手动调用对比DataAuditor.compare(obj1, obj2);
データのセンシティブワードフィルタリング
- 使用例👉 mybatis-mate-sensitive-words
- データのセンシティブワードフィルタリング(AC アルゴリズム):ハンドラーを設定するだけで、フレームワークがすべてのリクエスト内の文字列に対して自動でセンシティブワードのフィルタリングを行います。ネストされたキーワードもサポートし、センシティブワードを完全に検出します。
- データベースによるセルフメンテナンス型センシティブワード辞書(無料・制御可能):デフォルトでキャッシュされた語根を読み込み、指定した辞書での再読み込みもサポートします。
データ範囲(データ権限)
- 使用例:mybatis-mate-datascope
- @DataScope アノテーション
属性 型 必須指定 デフォルト値 説明 type String 否 "" 範囲タイプ。ビジネス分類を区別するために使用。デフォルトは空 value DataColumn[] 否 データ権限フィールド。複数フィールドの組み合わせをサポート ignore boolean 否 false 権限処理ロジックを無視するかどうか。true は無視 false は無視しない - @DataColumn アノテーション
属性 型 必須指定 デフォルト値 説明 alias String 否 "" 関連テーブルエイリアス name String 是 フィールド名 - 行レベルの粒度の権限制御です。例:上位部門は子部門の情報を確認できます。
// テスト test タイプのデータ権限範囲、混合ページングモード@DataScope(type = "test", value = {// 関連テーブル user にエイリアス u を付け、部門フィールドの権限を指定します。@DataColumn(alias = "u", name = "department_id"),// 関連テーブル user にエイリアス u を付け、携帯電話番号フィールドを指定します(自動で判断して処理)。@DataColumn(alias = "u", name = "mobile")})@Select("select u.* from user u")List<User> selectTestList(IPage<User> page, Long id, @Param("name") String username);// データ権限をテストし、最終的に実行される SQL 文を確認します。SELECT u.* FROM user u WHERE (u.department_id IN ('1', '2', '3', '5')) AND u.mobile LIKE '%1533%' LIMIT 1,10
テーブル構造の自動メンテナンス
- 使用例:
- データベースの
Schema
初期化およびアップグレード用の SQL を自動でメンテナンスします。flyway
とは異なり、分割テーブルデータベースをサポートし、コードによる SQL スクリプトの実行を制御できます。 - 初回実行時にデータベース内に
ddl_history
テーブルが生成され、以降 SQL スクリプトを実行するたびにバージョン情報が自動的に管理されます。@Componentpublic class MysqlDdl implements IDdl {/*** SQL スクリプトの実行方法*/@Overridepublic List<String> getSqlFiles() {return Arrays.asList("db/tag-schema.sql","D:\\db\\tag-data.sql");}}// MySQL のスレーブデータベースに切り替えて、SQL スクリプトを実行しますShardingKey.change("mysqlt2");ddlScript.run(new StringReader("DELETE FROM user;\n" +"INSERT INTO user (id, username, password, sex, email) VALUES\n" +"(20, 'Duo', '123456', 0, 'Duo@baomidou.com');"));
フィールドデータのバインディング(辞書による値の書き戻し)
- 使用例:👉 mybatis-mate-dict
- 注解 @FieldBind
属性 型 必須指定 デフォルト値 説明 sharding String 否 "" 分割データベース・分割テーブルのデータソース指定 type String 是 タイプ(異なるビジネスを区別するために使用) target String 是 ターゲット表示属性(バインディングする属性。データベースフィールド以外は除外してください) - データベースの
sex
値が0
、1
の場合、自動的に男
、女
にマッピングされます。 - オブジェクトへのマッピングも可能です。例:注文 ID に基づいて注文オブジェクトまたは注文番号をマッピングすることができます。
@FieldBind(type = "user_sex", target = "sexText")private Integer sex;// 表示用プロパティをバインディングし、テーブルに存在しない辞書項目を除外します。@TableField(exist = false)private String sexText;
- 業務処理クラスをバインディングするには、IDataBind インターフェースを実装し、Spring コンテナに注入する必要があります。
@Componentpublic class DataBind implements IDataBind {...}
仮想プロパティのバインディング
- 使用例:👉 mybatis-mate-jsonbind
- @JsonBind アノテーション
@JsonBind("バインディングタイプ")public class User {...}
- 返却される Json に対する仮想プロパティのバインディング戦略
@Componentpublic class JsonBindStrategy implements IJsonBindStrategy {@Overridepublic Map<String, Function<Object, Map<String, Object>>> getStrategyFunctionMap() {return new HashMap<String, Function<Object, Map<String, Object>>>(16) {{// 仮想ノードを注入するput(Type.departmentRole, (obj) -> new HashMap(2) {{User user = (User) obj;// 列挙型の変換put("statusText", StatusEnum.get(user.getStatus()).getDesc());// データベースを呼び出してロール情報を取得可能put("roleName", "マネージャー");}});}};}}
フィールドの暗号化と復号化
-
使用例:👉 mybatis-mate-encrypt
-
@FieldEncrypt アノテーション
属性 型 必須指定 デフォルト値 説明 password String 否 "" 暗号化パスワード algorithm Algorithm 否 PBEWithMD5AndDES PBE MD5 DES 混合アルゴリズム encryptor Class 否 IEncryptor 暗号化プロセッサ -
アルゴリズム
アルゴリズム 説明 MD5_32 32ビット MD5 アルゴリズム MD5_16 16ビット MD5 アルゴリズム BASE64 64文字で任意のバイナリデータを表現するアルゴリズム AES AES 対称アルゴリズム 【あいまい検索が必要な場合は必ずこのアルゴリズムを使用してください】 RSA 非対称暗号化アルゴリズム SM2 国密 SM2 非対称暗号化アルゴリズム、ECC ベース SM3 国密 SM3 メッセージダイジェストアルゴリズム、MD5 と比較して理解できます SM4 国密 SM4 対称暗号化アルゴリズム、無線LAN標準のパケットデータアルゴリズム PBEWithMD5AndDES 混合アルゴリズム PBEWithMD5AndTripleDES 混合アルゴリズム PBEWithHMACSHA512AndAES_256 混合アルゴリズム PBEWithSHA1AndDESede 混合アルゴリズム PBEWithSHA1AndRC2_40 混合アルゴリズム -
アノテーション
FieldEncrypt
でデータの暗号化と復号化を実装し、複数の暗号化アルゴリズムをサポートします@FieldEncryptprivate String email;
フィールドのマスキング
- 使用例:👉 mybatis-mate-sensitive-jackson
- アノテーション @FieldSensitive
- アノテーション
FieldSensitive
でデータのマスキングを実装し、携帯電話番号
、メールアドレス
、銀行口座番号
など9種類の一般的なマスキングルールが組み込まれています@FieldSensitive("testStrategy")private String username;@Configurationpublic class SensitiveStrategyConfig {/*** マスキング戦略を注入*/@Beanpublic ISensitiveStrategy sensitiveStrategy() {// カスタム testStrategy タイプのマスキング処理return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");}}// マスキング処理をスキップし、編集シナリオで使用RequestDataTransfer.skipSensitive();
複数データソースの分割データベース・分割テーブル(読み書き分離)
- 使用例:👉 mybatis-mate-sharding
- アノテーション @Sharding
属性 型 必須指定 デフォルト値 説明 value String 是 "" 分割データベースグループ名、空の場合はデフォルトのプライマリデータソースを使用 strategy Class 否 RandomShardingStrategy 分割データベース&分割テーブル戦略 - 設定
mybatis-mate:sharding:health: true # ヘルスチェックprimary: mysql # デフォルトのデータソース選択datasource:mysql: # データベースグループ- key: node1...- key: node2cluster: slave # 読み書き分離時にスレーブが SQL のクエリ操作を担当。プライマリのmasterはデフォルトで記述不要...postgres:- key: node1 # データノード...
- アノテーション
Sharding
でデータソースを切り替え、グループ内のノードはデフォルトでランダムに選択されます(読み取りはスレーブ、書き込みはプライマリ)@Mapper@Sharding("mysql")public interface UserMapper extends BaseMapper<User> {@Sharding("postgres")Long selectByUsername(String username);} - 指定したデータベースノードに切り替える
// MySQL のスレーブ node2 ノードに切り替えますShardingKey.change("mysqlnode2");