一、主要功能
字典绑定
字段加密
数据脱敏
表结构动态维护
数据审计记录
数据范围(数据权限)
数据库分库分表、动态据源、读写分离、数据库健康检查自动切换。
二、使用
2.1 依赖导入
Spring Boot 引入自动依赖注解包
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-starter</artifactId><version>1.0.8</version></dependency>
注解(实体分包使用)
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-annotation</artifactId><version>1.0.8</version></dependency>
2.2 字典绑定
例如 user_sex 类型 sex 字典结果映射到 sexText 属性
@FieldDict(type="user_sex",target="sexText")privateIntegersex;privateStringsexText;
实现 IDataDict 接口提供字典数据源,注入到 Spring 容器即可。
@ComponentpublicclassDataDictimplementsIDataDict{/***从数据库或缓存中获取*/privateMap<String,String>SEX_MAP=newConcurrentHashMap<String,String>(){{put("0","女");put("1","男");}};@OverridepublicStringgetNameByCode(FieldDictfieldDict,Stringcode){System.err.println("字段类型:"+fieldDict.type()+",编码:"+code);returnSEX_MAP.get(code);}}
2.3 字段加密
属性 @FieldEncrypt 注解即可加密存储,会自动解密查询结果,支持全局配置加密密钥算法,及注解密钥算法,可以实现 IEncryptor 注入自定义算法。
@FieldEncrypt(algorithm=Algorithm.PBEWithMD5AndDES)privateStringpassword;
2.4 数据脱敏
属性 @FieldSensitive 注解即可自动按照预设策略对源数据进行脱敏处理,默认 SensitiveType 内置 9 种常用脱敏策略。例如:中文名、银行卡账号、手机号码、固话号码、邮寄地址、电子邮箱、身份证号码、密码、车牌号 脱敏策略,也可以自定义策略如下:
@FieldSensitive(type="testStrategy")privateStringusername;@FieldSensitive(type=SensitiveType.mobile)privateStringmobile;
自定义脱敏策略 testStrategy 添加到默认策略中注入 Spring 容器即可。
@ConfigurationpublicclassSensitiveStrategyConfig{/***注入脱敏策略*/@BeanpublicISensitiveStrategysensitiveStrategy(){//自定义testStrategy类型脱敏处理returnnewSensitiveStrategy().addStrategy("testStrategy",t->t+"***test***");}}
2.5 DDL 数据结构自动维护
解决升级表结构初始化,版本发布更新 SQL 维护问题,目前支持 MySql、PostgreSQL。
@ComponentpublicclassPostgresDdlimplementsIDdl{/***执行SQL脚本方式*/@OverridepublicList<String>getSqlFiles(){returnArrays.asList(//内置包方式"db/tag-schema.sql",//文件绝对路径方式"D:\\db\\tag-data.sql");}}
不仅仅可以固定执行,也可以动态执行!!
ddlScript.run(newStringReader("DELETEFROMuser;\n"+"INSERTINTOuser(id,username,password,sex,email)VALUES\n"+"(20,'Duo','123456',0,'Duo@baomidou.com');"));
这样就完了吗??当然没有,它还支持多数据源执行!!!
@ComponentpublicclassMysqlDdlimplementsIDdl{@Overridepublicvoidsharding(Consumer<IDdl>consumer){//多数据源指定,主库初始化从库自动同步Stringgroup="mysql";ShardingGroupPropertysgp=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);});}}/***执行SQL脚本方式*/@OverridepublicList<String>getSqlFiles(){returnArrays.asList("db/user-mysql.sql");}}
2.6 动态多数据源主从自由切换
@Sharding 注解支持一句话使数据源不限制随意使用切换,你可以在 mapper 层添加注解,按需求指哪打哪!!
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-annotation</artifactId><version>1.0.8</version></dependency>0
你也可以自定义策略统一调兵遣将
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-annotation</artifactId><version>1.0.8</version></dependency>1
可以开启主从策略,当然也是可以开启健康检查!!!
2.7 数据权限
mapper 层添加注解:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-annotation</artifactId><version>1.0.8</version></dependency>2
模拟业务处理逻辑:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-annotation</artifactId><version>1.0.8</version></dependency>3
最终执行 SQL 输出:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-mate-annotation</artifactId><version>1.0.8</version></dependency>4
三、最后
大家好,我是 如梦技术春哥(mica微服务组件开源作者)笔者使用MyBatis-plus
已有 4 年多(资深老粉),mybatis-plus
帮助我们大大提升了开发效率,统一了企业内代码开发风格,降低维护成本。
如果大家在企业内有mybatis-mate
使用场景,不妨支持一下。
更多mybatis-mate
使用示例详见:https://gitee.com/baomidou/mybatis-mate-examples