<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>

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

          共 4887字,需瀏覽 10分鐘

           ·

          2021-07-30 23:00

          mybatis-plus 企業(yè)版 mybats-mate 強(qiáng)悍來(lái)襲!支持分庫(kù)分表,字段加密,字典回寫(xiě),表結(jié)構(gòu)自動(dòng)生成 SQL 維護(hù) 等。



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


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


          當(dāng)前版本主要功能:


          • 字典綁定

          • 字段加密

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

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

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


          未來(lái)計(jì)劃:

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

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

          • 更加強(qiáng)大的可視化代碼生成器模塊

          • 其它(留言告訴我!)


          • 字典綁定

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

          例如 user_sex 類(lèi)型 sex 字典結(jié)果映射到 sexText 屬性


          @Componentpublic class DataDict implements IDataDict {
          /** * 從數(shù)據(jù)庫(kù)或緩存中獲取 */ 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("字段類(lèi)型:" + fieldDict.type() + ",編碼:" + code); return SEX_MAP.get(code); }}


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



          •  字段加密

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

          屬性 @FieldEncrypt 注解即可加密存儲(chǔ),會(huì)自動(dòng)解密查詢(xún)結(jié)果,支持全局配置加密密鑰算法,及注解密鑰算法,可以實(shí)現(xiàn) IEncryptor 注入自定義算法。


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

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

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


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


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



          • DDL 數(shù)據(jù)結(jié)構(gòu)自動(dòng)維護(hù)

          解決升級(jí)表結(jié)構(gòu)初始化,版本發(fā)布更新 SQL 維護(hù)問(wèn)題。

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

          目前支持 MySql 、PostgreSQL 其它庫(kù)需要支持可以留言!!


          不僅僅可以固定執(zhí)行,也可以動(dòng)態(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]');"));


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

          @Componentpublic class MysqlDdl implements IDdl {
          @Override public void sharding(Consumer<IDdl> consumer) { // 多數(shù)據(jù)源指定,主庫(kù)初始化從庫(kù)自動(dòng)同步 String group = "mysql"; ShardingGroupProperty sgp = ShardingKey.getDbGroupProperty(group); if (null != sgp) { // 主庫(kù) sgp.getMasterKeys().forEach(key -> { ShardingKey.change(group + key); consumer.accept(this); }); // 從庫(kù) 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" ); }}


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


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

          @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 動(dòng)態(tài)數(shù)據(jù)庫(kù)組 * @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é)點(diǎn),可隨機(jī)選擇或者自己控制 this.changeDatabaseKey(group, sqlCommandType, keys -> chooseKey(keys, invocation)); }}

          可以開(kāi)啟主從策略,當(dāng)然也是可以開(kāi)啟健康檢查!!更多特性支持等你來(lái)用,需要什么告訴我,你說(shuō)我來(lái)寫(xiě)。


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


          • Spring Boot 引入自動(dòng)依賴(lài)注解包

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

          <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-mate-annotation</artifactId>
          <version>1.0.1</version>
          </dependency>
          • mybatis-mate-ddl-mysql :表結(jié)構(gòu)自動(dòng)維護(hù) Mysql 示例

          • mybatis-mate-ddl-postgres :表結(jié)構(gòu)自動(dòng)維護(hù) PostgreSQL 示例

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

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

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

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

          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  看黄在线免费观看 | 亚洲视频网站免费观看 | 一区高清视频 | 啊啊啊啊啊网站 | 国产手机AV |