【第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.pswp.cn/diannao/44408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44408.shtml
英文地址,請注明出處:http://en.pswp.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…