Mybatis 優(yōu)雅的數(shù)據(jù)處理方案,不信就算了!
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", "男");}};@Overridepublic 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 {/*** 注入脫敏策略*/@Beanpublic 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)題。
public class PostgresDdl implements IDdl {/*** 執(zhí)行 SQL 腳本方式*/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 {@Overridepublic 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 腳本方式*/@Overridepublic 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ò)注解隨心所欲的指哪打哪!!
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 動(dòng)態(tài)數(shù)據(jù)庫(kù)組* @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é)點(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)切換示例
