高度な機能
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 暗号化プロセッサ -
アルゴリズム Algorithm
アルゴリズム 説明 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クエリ操作を担当するスレーブデータベース、マスターデータベースはデフォルトで記述不要...postgres:- key: node1 # データノード...
- アノテーション
Sharding
によるデータソース切り替え、グループ内ノードはデフォルトでランダム選択(読み取りはスレーブ、書き込みはマスター)@Mapper@Sharding("mysql")public interface UserMapper extends BaseMapper<User> {@Sharding("postgres")Long selectByUsername(String username);} - 指定したデータベースノードへの切り替え
// mysql スレーブデータベース node2 ノードに切り替えShardingKey.change("mysqlnode2");