首页>>后端>>java->mybatis

mybatis

时间:2023-11-29 本站 点击:56

一、主要功能

字典绑定

字段加密

数据脱敏

表结构动态维护

数据审计记录

数据范围(数据权限)

数据库分库分表、动态据源、读写分离、数据库健康检查自动切换。

二、使用

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/58.html