1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Mybatis 優(yōu)雅的數(shù)據(jù)處理方案,不信就算了!

        共 4887字,需瀏覽 10分鐘

         ·

        2021-07-30 23:00

        mybatis-plus 企業(yè)版 mybats-mate 強悍來襲!支持分庫分表,字段加密,字典回寫,表結構自動生成 SQL 維護 等。



        mybatis-plus 企業(yè)版 mybats-mate 發(fā)布 1.0.1 


        該模塊為了解決企業(yè)級數(shù)據(jù)敏捷優(yōu)雅處理而設計,采用注解及各種設計模式,簡化復雜的數(shù)據(jù)處理邏輯,在框架層面處理封裝屏蔽,解脫開發(fā)者。


        當前版本主要功能:


        • 字典綁定

        • 字段加密

        • 數(shù)據(jù)脫敏

        • 表結構動態(tài)維護

        • 多數(shù)據(jù)源分庫分表


        未來計劃:

        • 數(shù)據(jù)審計記錄

        • 優(yōu)雅的多表處理方案

        • 更加強大的可視化代碼生成器模塊

        • 其它(留言告訴我?。?/span>


        • 字典綁定

        @FieldDict(type = "user_sex", target = "sexText")private Integer sex;private String sexText;

        例如 user_sex 類型 sex 字典結果映射到 sexText 屬性


        @Componentpublic class DataDict implements IDataDict {
        /** * 從數(shù)據(jù)庫或緩存中獲取 */ private Map<String, String> SEX_MAP = new ConcurrentHashMap<String, String>() {{ put("0", "女"); put("1", "男"); }};
        @Override public String getNameByCode(FieldDict fieldDict, String code) { System.err.println("字段類型:" + fieldDict.type() + ",編碼:" + code); return SEX_MAP.get(code); }}


        實現(xiàn) IDataDict 接口提供字典數(shù)據(jù)源,注入到 Spring 容器即可。



        •  字段加密

        @FieldEncrypt(algorithm = Algorithm.PBEWithMD5AndDES)private String password;

        屬性 @FieldEncrypt 注解即可加密存儲,會自動解密查詢結果,支持全局配置加密密鑰算法,及注解密鑰算法,可以實現(xiàn) IEncryptor 注入自定義算法。


        • 數(shù)據(jù)脫敏

        @FieldSensitive(type = "testStrategy")private String username;
        @FieldSensitive(type = SensitiveType.mobile)private String mobile;

        屬性 @FieldSensitive 注解即可自動按照預設策略對源數(shù)據(jù)進行脫敏處理,默認 SensitiveType 內(nèi)置 9 種常用脫敏策略例如:中文名、銀行卡賬號、手機號碼、固話號碼、郵寄地址、電子郵箱、身份證號碼、密碼、車牌號 脫敏策略,也可以自定義策略如下:


        @Configurationpublic class SensitiveStrategyConfig {
        /** * 注入脫敏策略 */ @Bean public ISensitiveStrategy sensitiveStrategy() { // 自定義 testStrategy 類型脫敏處理 return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***"); }}


        自定義脫敏策略 testStrategy 添加到默認策略中注入 Spring 容器即可。



        • DDL 數(shù)據(jù)結構自動維護

        解決升級表結構初始化,版本發(fā)布更新 SQL 維護問題。

        @Componentpublic class PostgresDdl implements IDdl {
        /** * 執(zhí)行 SQL 腳本方式 */ @Override public List<String> getSqlFiles() { return Arrays.asList( // 內(nèi)置包方式 "db/tag-schema.sql", // 文件絕對路徑方式                "D:\\db\\tag-data.sql" ); }}

        目前支持 MySql 、PostgreSQL 其它庫需要支持可以留言??!


        不僅僅可以固定執(zhí)行,也可以動態(tài)執(zhí)行??!

        ddlScript.run(new StringReader("DELETE FROM user;\n" +                "INSERT INTO user (id, username, password, sex, email) VALUES\n" +                "(20, 'Duo', '123456', 0, '[email protected]');"));


        這樣就完了嗎??當然沒有,它還指出多數(shù)據(jù)源執(zhí)行??!

        @Componentpublic class MysqlDdl implements IDdl {
        @Override public void sharding(Consumer<IDdl> consumer) { // 多數(shù)據(jù)源指定,主庫初始化從庫自動同步 String group = "mysql"; ShardingGroupProperty sgp = ShardingKey.getDbGroupProperty(group); if (null != sgp) { // 主庫 sgp.getMasterKeys().forEach(key -> { ShardingKey.change(group + key); consumer.accept(this); }); // 從庫 sgp.getSlaveKeys().forEach(key -> { ShardingKey.change(group + key); consumer.accept(this); }); } }
        /** * 執(zhí)行 SQL 腳本方式 */ @Override public List<String> getSqlFiles() { return Arrays.asList( "db/user-mysql.sql" // ,"db/user-data.sql" ); }}


        • 動態(tài)多數(shù)據(jù)源主從自由切換


        這個 sharding 支持一句話就是數(shù)據(jù)源不限制隨意使用切換,你可以在 mapper 層通過注解隨心所欲的指哪打哪?。?br>

        @Mapper@Sharding("mysql")public interface UserMapper extends BaseMapper<User> {
        @Sharding("postgres")    Long selectByUsername(String username);}

        你也可以自定義策略統(tǒng)一調(diào)兵遣將

        @Componentpublic class MyShardingStrategy extends RandomShardingStrategy {
        /** * 決定切換數(shù)據(jù)源 key {@link ShardingDatasource} * * @param group 動態(tài)數(shù)據(jù)庫組 * @param invocation {@link Invocation} * @param sqlCommandType {@link SqlCommandType} */ @Override public void determineDatasourceKey(String group, Invocation invocation, SqlCommandType sqlCommandType) { // 數(shù)據(jù)源組 group 自定義選擇即可, keys 為數(shù)據(jù)源組內(nèi)主從多節(jié)點,可隨機選擇或者自己控制 this.changeDatabaseKey(group, sqlCommandType, keys -> chooseKey(keys, invocation)); }}

        可以開啟主從策略,當然也是可以開啟健康檢查??!更多特性支持等你來用,需要什么告訴我,你說我來寫。


        源碼示例: https://gitee.com/baomidou/mybatis-mate-examples


        • Spring Boot 引入自動依賴注解包

        <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-mate-starter</artifactId>
        <version>1.0.1</version>
        </dependency>
        • 注解(實體分包使用)

        <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-mate-annotation</artifactId>
        <version>1.0.1</version>
        </dependency>
        • mybatis-mate-ddl-mysql :表結構自動維護 Mysql 示例

        • mybatis-mate-ddl-postgres :表結構自動維護 PostgreSQL 示例

        • mybatis-mate-dict :字段數(shù)據(jù)字典自動映射示例

        • mybatis-mate-encrypt :字段加密解密示例

        • mybatis-mate-sensitive-jackson :字段脫敏 jackson 實現(xiàn)示例

        • mybatis-mate-sharding :數(shù)據(jù)庫分庫分表、動態(tài)據(jù)源、讀寫分離、數(shù)據(jù)庫健康檢查自動切換示例

        瀏覽 62
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            操她视频在线观看 | 啊灬啊别停灬用力啊太深在线视频 | 淫色综合 | 免费看裸体网站樱花 | 天天色天天操综合 | 波多野结衣成人视频 | 日韩免费高清一区二区 | 国模张雪磬 | 日韩欧美在线观看视频 | 男女做爰免费一区二区羞羞 |