【第26章】MyBatis-Plus之高级特性

文章目录

  • 前言
  • 一、数据审计(对账)
  • 二、数据敏感词过滤
  • 三、数据范围(数据权限)
  • 四、表结构自动维护
  • 五、字段数据绑定(字典回写)
  • 六、虚拟属性绑定
  • 七、字段加密解密
  • 八、字段脱敏
  • 九、多数据源分库分表(读写分离)
  • 十、多数据源动态加载卸载
  • 十一、多数据源事务(JTA Atomikos)
  • 总结


前言

Mybatis-Mate 是为 MyBatis-Plus 提供的企业级模块,旨在更敏捷优雅处理数据。

  • 使用示例 :传送门
  • 联系作者确认后微信公众号发文介绍 Mybatis-Mate 的软文,可免费获得永久个人授权证书。
  • 该模块属于 MyBatis-Plus 的扩展库,非 MyBatis-Plus 的收费版本,任何问题由 青苗 个人负责。

一、数据审计(对账)

  • 使用示例:👉 mybatis-mate-audit
  • 对比两对象属性差异,例如:银行流水对账。
// 1,异步回调,注意 @EnableAsync 开启异步
applicationEventPublisher.publishEvent(new DataAuditEvent((t) -> {List<Change> changes = t.apply(newVersion, oldVersion);for (Change valueChange : changes) {ValueChange change = (ValueChange) valueChange;System.err.println(String.format("%s不匹配,期望值 %s 实际值 %s", change.getPropertyName(), change.getLeft(), change.getRight()));}
}));// 2,手动调用对比
DataAuditor.compare(obj1, obj2);

二、数据敏感词过滤

  • 使用示例👉 mybatis-mate-sensitive-words
  • 数据敏感词过滤(AC 算法)配置完处理器,框架自动处理请求的所有字符串敏感词过滤,支持嵌套关键词让敏感词无处遁形。
  • 数据库自维护敏感词库(免费、可控),默认加载缓存词根支持指定重新加载词库。

三、数据范围(数据权限)

  • 使用示例:mybatis-mate-datascope
  • 注解 @DataScope
属性类型必须指定默认值描述
typeString“”范围类型,用于区分对于业务分类,默认空
valueDataColumn[]数据权限字段,支持多字段组合
ignorebooleanfalse忽略权限处理逻辑 true 是 false 否
  • 注解 @DataColumn
属性类型必须指定默认值描述
aliasString“”关联表别名
nameString字段名
  • 行级粒度权限控制,例如:上级部门可以查看子部门信息。
// 测试 test 类型数据权限范围,混合分页模式
@DataScope(type = "test", value = {// 关联表 user 别名 u 指定部门字段权限@DataColumn(alias = "u", name = "department_id"),// 关联表 user 别名 u 指定手机号字段(自己判断处理)@DataColumn(alias = "u", name = "mobile")
})
@Select("select u.* from user u")
List<User> selectTestList(IPage<User> page, Long id, @Param("name") String username);// 测试数据权限,最终执行 SQL 语句
SELECT u.* FROM user u WHERE (u.department_id IN ('1', '2', '3', '5')) AND u.mobile LIKE '%1533%' LIMIT 1,10

关于
请注意必须注入 IDataScopeProvider 实现类处理数据权限,关于数据传参支持 2 种方式: 1,自定义 mapper 方法通过方法参数传递,在 setWhere 方法 Object[] args 参数中获取 2,利用 ThreadLocal 传递参数,你可以拦截 controller 层或者 service 层设置数据权限处理参数,更多可以 👉参考

四、表结构自动维护

  • 使用示例:
    • 👉 mybatis-mate-ddl-mysql
    • 👉 mybatis-mate-ddl-postgres
  • 数据库 Schema 初始化,升级 SQL 自动维护,区别于 flyway 支持分表库、可控制代码执行 SQL 脚本
  • 首次会在数据库中生成 ddl_history 表,每次执行SQL脚本会自动维护版本信息。
@Component
public class MysqlDdl implements IDdl {/*** 执行 SQL 脚本方式*/@Overridepublic List<String> getSqlFiles() {return Arrays.asList("db/tag-schema.sql","D:\\db\\tag-data.sql");}
}// 切换到 mysql 从库,执行 SQL 脚本
ShardingKey.change("mysqlt2");
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');"));

五、字段数据绑定(字典回写)

  • 使用示例:👉 mybatis-mate-dict
  • 注解 @FieldBind
属性类型必须指定默认值描述
shardingString“”分库分表数据源指定
typeString类型(用于区分不同业务)
targetString目标显示属性(待绑定属性,注意非数据库字段请排除)
  • 数据库 sex 值 0、1 自动映射为 男、女
  • 可以绑定映射为对象,例如:根据订单 ID 映射 订单对象或者编号
@FieldBind(type = "user_sex", target = "sexText")
private Integer sex;
// 绑定显示属性,非表字典(排除)
@TableField(exist = false)
private String sexText;
  • 绑定业务处理类需要实现 IDataBind 接口,注入 spring 容器
@Component
public class DataBind implements IDataBind {...
}

六、虚拟属性绑定

  • 使用示例:👉 mybatis-mate-jsonbind
  • 注解 @JsonBind
@JsonBind("绑定类型")
public class User {...
}
  • 返回 Json 虚拟属性绑定策略
@Component
public class JsonBindStrategy implements IJsonBindStrategy {@Overridepublic Map<String, Function<Object, Map<String, Object>>> getStrategyFunctionMap() {return new HashMap<String, Function<Object, Map<String, Object>>>(16) {{// 注入虚拟节点put(Type.departmentRole, (obj) -> new HashMap(2) {{User user = (User) obj;// 枚举类型转换put("statusText", StatusEnum.get(user.getStatus()).getDesc());// 可调用数据库查询角色信息put("roleName", "经理");}});}};}
}

七、字段加密解密

  • 使用示例:👉 mybatis-mate-encrypt

  • 注解 @FieldEncrypt

属性类型必须指定默认值描述
passwordString“”加密密码
algorithmAlgorithmPBEWithMD5AndDESPBE MD5 DES 混合算法
encryptorClassIEncryptor加密处理器
  • 算法 Algorithm
算法描述
MD5_3232 位 md5 算法
MD5_1616 位 md5 算法
BASE6464 个字符来表示任意二进制数据算法
AESAES 对称算法 【需要模糊查询的请务必使用该算法】
RSA非对称加密算法
SM2国密 SM2 非对称加密算法,基于 ECC
SM3国密 SM3 消息摘要算法,可以用 MD5 作为对比理解
SM4国密 SM4 对称加密算法,无线局域网标准的分组数据算法
PBEWithMD5AndDES混合算法
PBEWithMD5AndTripleDES混合算法
PBEWithHMACSHA512AndAES_256混合算法
PBEWithSHA1AndDESede混合算法
PBEWithSHA1AndRC2_40混合算法
  • 👉 国密 SM2.3.4 算法使用规范
  • 注意
    • MD5 算法为不可逆算法,存储数据库及查询结果都是密文。
    • SM4 算法必须依赖 bouncycastle 加密库。
    • 混合算法必须依赖 jasypt 加密库。
    • 【注意】查询返回加密对象必须包含加密注解信息,单纯的返回某个 String 或者 List 某个集合是无法解密的。
  • 注解 FieldEncrypt 实现数据加解密,支持多种加密算法
@FieldEncrypt
private String email;

八、字段脱敏

  • 使用示例:👉 mybatis-mate-sensitive-jackson
  • 注解 @FieldSensitive
  • 注解 FieldSensitive 实现数据脱敏,内置 手机号邮箱银行卡号 等 9 种常用脱敏规则
@FieldSensitive("testStrategy")
private String username;@Configuration
public class SensitiveStrategyConfig {/*** 注入脱敏策略*/@Beanpublic ISensitiveStrategy sensitiveStrategy() {// 自定义 testStrategy 类型脱敏处理return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");}
}// 跳过脱密处理,用于编辑场景
RequestDataTransfer.skipSensitive();

九、多数据源分库分表(读写分离)

  • 使用示例:👉 mybatis-mate-sharding
  • 注解 @Sharding
属性类型必须指定默认值描述
valueString“”分库组名,空使用默认主数据源
strategyClassRandomShardingStrategy 分库&分表策略
  • 配置
mybatis-mate:sharding:health: true # 健康检测primary: mysql # 默认选择数据源datasource:mysql: # 数据库组- key: node1...- key: node2cluster: slave # 从库读写分离时候负责 sql 查询操作,主库 master 默认可以不写...postgres:- key: node1 # 数据节点...
  • 注解 Sharding 切换数据源,组内节点默认随机选择(查从写主)
@Mapper
@Sharding("mysql")
public interface UserMapper extends BaseMapper<User> {@Sharding("postgres")Long selectByUsername(String username);}
  • 切换指定数据库节点
// 切换到 mysql 从库 node2 节点
ShardingKey.change("mysqlnode2");

十、多数据源动态加载卸载

  • 使用示例:👉 mybatis-mate-sharding-dynamic

十一、多数据源事务(JTA Atomikos)

  • 使用示例:👉 mybatis-mate-sharding-jta-atomikos

总结

回到顶部

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习嵌入式----Linux系统命令集合与shell脚本

Shell是一门编程语言&#xff0c;作为学习shell的开始&#xff0c;需要事先搞明白&#xff1a;编程的目的是什么&#xff1f;什么是编程语言&#xff1f;什么是编程&#xff1f; shell本身就是一门解释型、弱类型、动态语言&#xff0c;与python相对应&#xff0c;Python属于解…

aardio —— 今日减bug

打字就减bug 鼠标双击也减bug 看看有多少bug够你减的 使用方法&#xff1a; 1、将资源附件解压缩&#xff0c;里面的文件夹&#xff0c;放到aardio\plugin\plugins 目录 2、aardio 启动插件 → 插件设置 → 选中“今日减bug” → 保存。 3、重启 aardio&#xff0c;等aa…

旗晟智能巡检机器人:开启工业运维的智能化新篇章

在当今快速发展的工业领域&#xff0c;安全、效率和成本控制是企业运营的核心。旗晟科技以创新为驱动&#xff0c;推出了一站式的工业级智能巡检机器人数字化全景运维解决方案&#xff0c;为石油、天然气、化工、电力等高危行业提供了一个全新的运维模式。 一、面对挑战&#x…

提升机器视觉与机器学习软件安全性的实践策略

在近几年科技爆发中&#xff0c;机器学习&#xff08;ML&#xff09;和机器视觉&#xff08;MV&#xff09;的结合正在改变各行各业。机器学习通过数据驱动的算法让计算机能够自我学习&#xff0c;而机器视觉赋予计算机识别和理解图像的能力。这种结合使得计算机可以高效地执行…

上位机开发关键技术

《上位机开发关键技术》 在现代工业自动化、智能化的发展进程中&#xff0c;上位机作为人机交互的重要接口&#xff0c;发挥着至关重要的作用。上位机能够实现对下位机设备的监控、数据采集与处理、控制指令下达等功能&#xff0c;为生产过程的优化、设备的高效运行提供了有力支…

浅谈化工厂环保管理的痛点、智慧环保的必要性及EHS系统的实现路径

在全球环保意识日益增强的背景下&#xff0c;化工厂作为工业领域的重要组成部分&#xff0c;其环保管理显得尤为重要。然而&#xff0c;化工厂在追求经济效益的同时&#xff0c;也面临着诸多环保管理的痛点。本文将围绕化工厂环保管理的痛点、化工厂为何需要智慧环保以及如何借…

设计分享—国外后台界面设计赏析

国外后台界面设计将用户体验放在首位&#xff0c;通过直观易懂的布局和高效的交互设计&#xff0c;提升用户操作效率和满意度。 设计不仅追求美观大方&#xff0c;还注重功能的实用性和数据的有效展示&#xff0c;通过图表和图形化手段使数据更加直观易懂。 采用响应式布局&a…

Global Mapper:地理信息的温柔探索

引言 在这纷繁复杂的世界里&#xff0c;地理信息系统&#xff08;GIS&#xff09;如同一把利器&#xff0c;帮助我们剖析、理解和改造这个世界。而在众多GIS软件中&#xff0c;Global Mapper无疑是其中的佼佼者。作为一款功能全面且易于使用的GIS应用程序&#xff0c;Global M…

相机光学(三十一)——暗房设置的要求

ISO标准通常在测试相机时指定对周围条件的要求。由于摄影ISO组试图保持这些要求与所有标准一致&#xff0c;所以我们总结了这个“技术说明”中的重要方面。   温度应保持在23C /- 2C的范围内。在设计空调系统时&#xff0c;请记住图表照明的耗电量和发热量。湿度需要在&#…

数字安全护航技术能力全景图 | 亚信安全实力占据75领域

近日&#xff0c;2024全球数字经济大会——数字安全生态建设专题论坛在北京成功举办。会上&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;正式发布了《数字安全护航技术能力全景图》&#xff0c;亚信安全凭借全面的产品技术能力&#xff0c;成功入…

【网络安全】SSRF 之 Azure Digital Twins Explorer

未经许可&#xff0c;不得转载。 文章目录 正文 正文 Azure Digital Twins 是一个微软下的平台服务&#xff0c;允许开发者创建和运行数字孪生模型&#xff0c;这些模型能够反映物理世界中的实体及其关系&#xff0c;通过这些模型可以进行监控、分析和预测等操作。 1、进入主…

How to Describe Figures in a Research Article

How to Describe Figures in a Research Article DateAuthorVersionNote2024.07.10Dog TaoV1.0Finish the document. 文章目录 How to Describe Figures in a Research ArticleGeneral GuidelinesDetailed DescriptionsCommon Describing Phrases Effective communication of …

构建机部署之Azure DevOps添加代理机(Linux)

目录 一、权限检查二、添加代理机三、更换代理四、删除并重新配置代理 一、权限检查 确认用户具有权限 默认代理池的所有者有添加代理的权限 1&#xff09;代理池所有者可以生成一个PAT&#xff0c;共享使用。代理不会在日常操作中使用此人凭据&#xff0c;但需要使用有权限的…

【多线程】线程同步--条件变量的原理及其使用

文章目录 前言线程同步的基本概念条件变量定义条件变量初始化条件变量销毁条件变量等待条件&#xff08;重要&#xff09;唤醒等待简单运用常见使用条件变量的格式 前言 线程同步意味着在多线程并发执行中&#xff0c;协调线程之间的执行顺序&#xff0c;以确保共享资源被正确…

Kylin系列(三)安装与配置:搭建你的第一个 Kylin 环境

目录 1. Kylin 简介 1.1 Kylin的核心特点 1.2 适用场景 2. 环境准备 2.1 硬件要求 2.2 软件依赖 3. 安装与配置 3.1 安装JDK 3.2 安装Hadoop 3.2.1 下载并解压Hadoop 3.2.2 配置Hadoop环境变量 3.2.3 配置Hadoop文件 3.2.4 格式化HDFS并启动Hadoop服务 3.3 安装H…

hive架构详解:HQL案例解析(第15天)

系列文章目录 一、Hive基础架构&#xff08;重点&#xff09; 二、Hive数据库,表操作&#xff08;重点&#xff09; 三、Hadoop架构详解(hdfs)&#xff08;补充&#xff09; 四、Hive环境准备&#xff08;操作&#xff09;(补充) 文章目录 系列文章目录前言一、Hive基础架构1、…

4. 小迪安全v2023笔记 javaEE应用

4. 小迪安全v2023笔记 javaEE应用 ​ 大体上跟随小迪安全的课程&#xff0c;本意是记录自己的学习历程&#xff0c;不能说是完全原创吧&#xff0c;大家可以关注一下小迪安全。 若有冒犯&#xff0c;麻烦私信移除。 默认有java基础。 文章目录 4. 小迪安全v2023笔记 javaEE应…

分块

分块 分块是将线段树的懒标记方法一般化&#xff0c;可证明通常情况下以 n \sqrt n n ​分块是最优解。 分块思想核心&#xff1a; 整块打包维护 碎块逐个枚举 int len,num;//len:每块长度,num:分块数量 int begin[],end[],pos[],sum[],add[];//begin,end:每块的始末下标 po…

linux下安装cutecom串口助手;centos安装cutecom串口助手;rpm安装包安装cutecom串口助手

在支持apt-get的系统下安装 在终端命令行中输入&#xff1a; sudo apt-get install cutecom 安装好后输入 sudo cutecom 就可以了 关于如何使用&#xff0c;可以看这个https://www.cnblogs.com/xingboy/p/14388610.html 如果你的电脑不支持apt-get。 那我们就通过安装包…

‘wget‘ 不是内部或外部命令,也不是可运行的程序

在Windows环境下创建了虚拟环境并安装了wget包&#xff0c;但在使用该命令的时候仍然报错&#xff0c;‘wget’ 不是内部或外部命令,也不是可运行的程序 解决方案&#xff1a; 去官网下载对应位数的.exe文件&#xff0c;将其放在C:\Windows\System32目录下即可, 别下错版本&a…