<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          666,Mybatis 優(yōu)雅的數(shù)據(jù)處理方案!

          共 4814字,需瀏覽 10分鐘

           ·

          2021-07-28 13:13


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


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


          當前版本主要功能:


          • 字典綁定

          • 字段加密

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

          • 表結(jié)構(gòu)動態(tài)維護

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


          未來計劃:

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

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

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

          • 其它(留言告訴我!)


          • 字典綁定

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

          例如 user_sex 類型 sex 字典結(jié)果映射到 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 注解即可加密存儲,會自動解密查詢結(jié)果,支持全局配置加密密鑰算法,及注解密鑰算法,可以實現(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ù)結(jié)構(gòu)自動維護

          解決升級表結(jié)構(gòu)初始化,版本發(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 層通過注解隨心所欲的指哪打哪!!

          @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 :表結(jié)構(gòu)自動維護 Mysql 示例

          • mybatis-mate-ddl-postgres :表結(jié)構(gòu)自動維護 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ù)庫健康檢查自動切換示例


          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水蜜桃视频网站 | 日韩A片一区二区三区在线播放 | 欧美成综合 | 天堂在线免费视频 | 亚洲色无码A片一区二小说 |