666,Mybatis 優(yōu)雅的數(shù)據(jù)處理方案!
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", "男");}};@Overridepublic 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 {/*** 注入脫敏策略*/@Beanpublic ISensitiveStrategy sensitiveStrategy() {// 自定義 testStrategy 類型脫敏處理return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");}}
自定義脫敏策略 testStrategy 添加到默認策略中注入 Spring 容器即可。
DDL 數(shù)據(jù)結(jié)構(gòu)自動維護
解決升級表結(jié)構(gòu)初始化,版本發(fā)布更新 SQL 維護問題。
public class PostgresDdl implements IDdl {/*** 執(zhí)行 SQL 腳本方式*/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 {@Overridepublic 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 腳本方式*/@Overridepublic List<String> getSqlFiles() {return Arrays.asList("db/user-mysql.sql"// ,"db/user-data.sql");}}
動態(tài)多數(shù)據(jù)源主從自由切換
這個 sharding 支持一句話就是數(shù)據(jù)源不限制隨意使用切換,你可以在 mapper 層通過注解隨心所欲的指哪打哪!!
public interface UserMapper extends BaseMapper<User> {Long selectByUsername(String username);}
你也可以自定義策略統(tǒng)一調(diào)兵遣將
public class MyShardingStrategy extends RandomShardingStrategy {/*** 決定切換數(shù)據(jù)源 key {@link ShardingDatasource}** @param group 動態(tài)數(shù)據(jù)庫組* @param invocation {@link Invocation}* @param sqlCommandType {@link SqlCommandType}*/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ù)庫健康檢查自動切換示例
