Mybatis 优雅的数据处理方案,不信就算了!
mybatis-plus 企业版 mybats-mate 强悍来袭!支持分库分表,字段加密,字典回写,表结构自动生成 SQL 维护 等。
mybatis-plus 企业版 mybats-mate 发布 1.0.1
该模块为了解决企业级数据敏捷优雅处理而设计,采用注解及各种设计模式,简化复杂的数据处理逻辑,在框架层面处理封装屏蔽,解脱开发者。
当前版本主要功能:
字典绑定
字段加密
数据脱敏
表结构动态维护
多数据源分库分表
未来计划:
数据审计记录
优雅的多表处理方案
更加强大的可视化代码生成器模块
其它(留言告诉我!)
字典绑定
@FieldDict(type = "user_sex", target = "sexText")private Integer sex;private String sexText;
例如 user_sex 类型 sex 字典结果映射到 sexText 属性
@Componentpublic class DataDict implements IDataDict {/*** 从数据库或缓存中获取*/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);}}
实现 IDataDict 接口提供字典数据源,注入到 Spring 容器即可。
字段加密
@FieldEncrypt(algorithm = Algorithm.PBEWithMD5AndDES)private String password;
属性 @FieldEncrypt 注解即可加密存储,会自动解密查询结果,支持全局配置加密密钥算法,及注解密钥算法,可以实现 IEncryptor 注入自定义算法。
数据脱敏
@FieldSensitive(type = "testStrategy")private String username;@FieldSensitive(type = SensitiveType.mobile)private String mobile;
属性 @FieldSensitive 注解即可自动按照预设策略对源数据进行脱敏处理,默认 SensitiveType 内置 9 种常用脱敏策略例如:中文名、银行卡账号、手机号码、固话号码、邮寄地址、电子邮箱、身份证号码、密码、车牌号 脱敏策略,也可以自定义策略如下:
@Configurationpublic class SensitiveStrategyConfig {/*** 注入脱敏策略*/@Beanpublic ISensitiveStrategy sensitiveStrategy() {// 自定义 testStrategy 类型脱敏处理return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");}}
自定义脱敏策略 testStrategy 添加到默认策略中注入 Spring 容器即可。
DDL 数据结构自动维护
解决升级表结构初始化,版本发布更新 SQL 维护问题。
public class PostgresDdl implements IDdl {/*** 执行 SQL 脚本方式*/public List<String> getSqlFiles() {return Arrays.asList(// 内置包方式"db/tag-schema.sql",// 文件绝对路径方式"D:\\db\\tag-data.sql");}}
目前支持 MySql 、PostgreSQL 其它库需要支持可以留言!!
不仅仅可以固定执行,也可以动态执行!!
ddlScript.run(new StringReader("DELETE FROM user;\n" +"INSERT INTO user (id, username, password, sex, email) VALUES\n" +"(20, 'Duo', '123456', 0, 'Duo@baomidou.com');"));
这样就完了吗??当然没有,它还指出多数据源执行!!
@Componentpublic class MysqlDdl implements IDdl {@Overridepublic void sharding(Consumer<IDdl> consumer) {// 多数据源指定,主库初始化从库自动同步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);});}}/*** 执行 SQL 脚本方式*/@Overridepublic List<String> getSqlFiles() {return Arrays.asList("db/user-mysql.sql"// ,"db/user-data.sql");}}
动态多数据源主从自由切换
这个 sharding 支持一句话就是数据源不限制随意使用切换,你可以在 mapper 层通过注解随心所欲的指哪打哪!!
public interface UserMapper extends BaseMapper<User> {Long selectByUsername(String username);}
你也可以自定义策略统一调兵遣将
public class MyShardingStrategy extends RandomShardingStrategy {/*** 决定切换数据源 key {@link ShardingDatasource}** @param group 动态数据库组* @param invocation {@link Invocation}* @param sqlCommandType {@link SqlCommandType}*/public void determineDatasourceKey(String group, Invocation invocation, SqlCommandType sqlCommandType) {// 数据源组 group 自定义选择即可, keys 为数据源组内主从多节点,可随机选择或者自己控制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 :表结构自动维护 Mysql 示例
mybatis-mate-ddl-postgres :表结构自动维护 PostgreSQL 示例
mybatis-mate-dict :字段数据字典自动映射示例
mybatis-mate-encrypt :字段加密解密示例
mybatis-mate-sensitive-jackson :字段脱敏 jackson 实现示例
mybatis-mate-sharding :数据库分库分表、动态据源、读写分离、数据库健康检查自动切换示例
