mybatis-sql-viewer外掛程式主要提供能力:將mybatis xml轉成真實SQL語句、參數mock、SQL規範檢查、SQL索引檢查、SQL執行、SQL壓測及Mybatis SQL語句掃描。
簡介
雖然寫了很久的CRUD,但是依舊覺得寫好CRUD是一件非常難且麻煩的事情,以下的情況在開發過程中應該都遇到過:
SQL的編寫需要細心,寫錯了SQL欄位或者表名稱,修改完要重新開機(幾分鐘過去了)
SQL編寫好後進行測試時,造數據也好麻煩,特別是還存在表關聯的情況,數據內容不真實,還容易超出欄位長度,讓人抓狂
SQL好不容易能跑了,又會有以下的疑問
符不符合SQL開發規範?
是否能命中索引?又可能命中哪個索引?
日常環境數據太少,如何模擬SQL在生產環境下執行的真實情況?
效能怎麽樣,最大TPS可以達到多少?數量大時是否會存在慢SQL?
TP99/TP90、最大RT/平均RT、平均TPS是多少呢?
對於使用Mybatis的開發者還會存在這些問題:
Mapper介面方法和XML標簽不對應,修改完要重新開機(又幾分鐘過去了)
XML中多寫了一個逗號或者分號,又沒有錯誤提示,介面測試呼叫時才發現,修改完又又要重新開機(好多個幾分鐘過去了)
這個Mapper介面對應的是哪個XML檔?找找十幾秒過去了
這個XMl檔對應的是哪個Mapper介面?找找十幾秒又過去了
這個計畫中有多少個XML檔?有多少SQL語句?裏面是否存在慢SQL?是否都符合開發規範?
按照這種開發模式,需要重新開機好多次套用,對於每次啟動都需要幾分鐘的套用來說開發體驗簡直就是災難。基於上述的問題,開發了mybatis-sql-viewer外掛程式,基於此外掛程式可以實作以下能力而不需要啟動套用:
基於此外掛程式以上的問題在編碼階段即可解決:
SQL的編寫好麻煩,寫錯了SQL欄位或者表名稱,修改完需要重新開機 --> 語法校驗
SQL編寫好後進行測試時,造數據麻煩,特別是存在表關聯的情況,數據內容不真實,容易超出欄位長度報錯 --> 多種數據mock方式,自動關聯
SQL好不容易跑起來了,又會有以下的疑問:
符不符合SQL開發規範?--> SQL規範檢查
是否能命中索引,可能命中哪個索引?--> SQL索引檢查&SQL執行計劃
日常環境數據量太少,如何模擬SQL在生產環境下執行的真實情況?--> 支持大批次數據mock
效能怎麽樣,最大TPS可以達到多少?數量大時是否會存在慢SQL?--> SQL語句壓測,結果一目了然
基於此外掛程式可以提高CRUD的效率及SQL品質,開發流程可以轉換為如下模式:
上述的規約均來自【阿裏巴巴Java開發手冊】中的MySQL資料庫章節。
安裝
IDEA中安裝:
Preferences(Settings) > Plugins > Marketplace > Search"mybatis sql viewer" > Install
手動安裝:
在releases頁面中下載最新版本的zip檔
Preferences(Settings) > Plugins > ⚙️ > Install plugin from disk... -> 選擇下載的檔安裝
使用
因為需要拉取資料庫表的後設資料資訊、執行SQL,所以使用前需要配置一下資料來源。
支持多資料來源配置,點選「datasource」按鈕即可完成資料來源的建立、選擇、刪除、測試。
模式
此外掛程式有兩種模式:mybatis模式和非mybatis模式。差別在於mybatis模式支持以下功能:
mapper介面方法參數mock
隨機參數
預設參數
自訂參數
mapper介面/方法跳轉XML檔
XML檔跳轉mapper介面/方法
基於mock參數將mapper介面方法的xml轉換成真實SQL
按照檔/計畫維度掃描XML檔,並生成對應的真實SQL語句,並進行規約/索引相關校驗
非mybatis模式
將mybatis mode的勾選框關閉即可使用非mybatis模式,然後在「statement」Tab左欄手寫SQL即可。
mybatis模式
將mybatis mode的勾選框選中即可使用mybatis模式,mybatis模式主要添加了mapper介面方法參數mock、檔跳轉及mybatis檔掃描的功能。
在mapper介面或XML檔中點選「sql」圖示,即可生成mapper方法參數隨機值,如果對生成的隨機不滿意或不滿足條件,可以手動修改進行自訂。然後點選「statement」Tab即可使用該參數將mybatis的xml實作轉換成真實的SQL語句。
mybatis sql掃描
支持檔和計畫兩個維度掃描。
檔維度掃描
點選或者namespace對應的mapper介面旁邊的「sql」圖示即可完成檔維度mybatis sql的掃描
計畫維度
點選「mybatis sql scan」即可進行計畫維度mybatis sql的掃描
掃描結果左側是mybatis檔的namespace(對於mapper介面名)及其下的方法名,點選具體的方法,右側產生其對應的SQL語句,並會對該SQL語句進行規約檢查、索引檢查並輸出此SQL語句的的執行計劃
圖示說明
計畫維度掃描
all:所有語句
compliance with spec:符合SQL規約要求的SQL語句
does not meet spec:不符合SQL規約的要求的SQL語句
full table scan:存在全表掃描的SQL語句
error:存在錯誤的SQL語句,可能是SQL編寫錯誤,參數錯誤,資料庫連線錯誤等
SQL語句
語法校驗&規約檢查
對於「非mybatis模式」需要左欄編寫SQL語句,「mybatis」模式則需要在mapper介面或XML檔中點選「sql」圖示生成SQL,右欄自動進行語法校驗和規規約校驗
1. SQL語法校驗
2. 規約校驗
SQL執行
點選「result」tab後會自動執行「statement」Tab中的SQL語句。執行結果由3部份組成:執行資訊、執行計劃及執行結果。
執行資訊包含:執行的語句、執行該條語句的耗時、返回的記錄數及表中記錄總數
執行計劃:EXPLAIN對應的結果
執行結果:結果表格,預設只返回100條記錄(只有SELECT語句有該資訊)
SQL壓測
點選「stress」Tab進行壓測配置,配置頁面如下:
配置說明
值型別由兩種方式組成:
use sql directly:表示直接使用「statement」Tab中的SQL語句進行壓測
configure parameters:表示對「statement」Tab中的SQL語句的條件進行參數配置。
流量模型也是由兩種方式組成(與並行數有關):
increase in a constant rate:並行數按照固定速率增長,增長速率由「遞增時長」指定
fixed concurrent number:直接按照指定並行數進行壓測
遞增時長:指定並行數的增長速率,單位為秒
並行數:同時執行SQL語句的執行緒數
壓測時長:指定壓測時間,單位為分鐘,因為壓測的指標數據直接存在記憶體中,應該避免壓測時間過長造成Idea OOM
配置完成後,點選「stress」按鈕即可進行壓測,並自動跳轉到壓測報告「report」Tab
壓測報告
壓測報告中主要包含指標:
請求成功率
TP99
TP90
最大RT
平均RT
最大TPS
平均TPS
並行數
異常數
總請求數
圖表包含:
請求成功率
平均RT
TPS
SQL表
點選「table」Tab時會對「statement」Tab中的SQL語句進行解析,提取出表名稱,然後每個表作為一個Tab。如以下語句:
SELECT
state
FROM
CITY
WHERE
country_name IN (
SELECT
name
FROM
COUNTRY
WHERE
idIN (1, 2, 3)
)
SQL語句中包含了兩個表:CITY和COUNTRY,所以會產生兩個Tab,如下圖所示:
欄位
左欄顯示表的欄位資訊:欄位名稱、型別、是否可為NULL、預設值、索引、註釋說明等資訊
右欄顯示對表進行建表規約檢查的結果:如表名、欄位名是否包含大寫字母或特殊字元等檢查
索引
左欄顯示表的索引資訊
右欄顯示對索引進行規約檢查的結果
數據mock
mock表數據,支持批次數據mock,左欄進行mock數據型別配置,右欄顯示mock結果
mock規則
左欄表單中「Mock Type」和「Mock Value」進行mock配置。初始化時,已經按照欄位型別設定了預設的配置,可以按照需求進行修改。支持多種mock數據規則:
random:隨機值
string
name:姓名
datetime:形如:2023-01-01 00:00:00
integer
decimal
date:形如2023-01-01
timestamp
time:形如18:00:00
year:形如2023
city
url
ip
university
phone
lexicon:自訂詞庫
database:資料庫,需要填寫table.field
increment:遞增
fixed:固定值
regex:正則
none:不進行mock,生成insert語句時不包含此欄位
詞庫建立
點選「lexicon」按鈕,即可進行詞庫的建立
mock數據預覽
配置好mock配置後,可以點選「preview」按鈕進行mock數據的預覽,預設會生成50條數據
mock數據
預覽數據符合要求後,點選「mock」按鈕完成數據的插入,預設插入100條數據,透過修改「Mock Rows」的值指定mock記錄數,經測試,插入10w條數據花費時間在10秒內,所以可以進行大批次數據mock。
mock數據清理
mock數據完成後,會儲存主鍵id的範圍(持久化儲存到本地檔),在對SQL語句進行壓測完成後,可以進行清理,避免汙染日常真實的測試數據。點選「Clean」按鈕即可完成清理工作
配置
相關配置:Preferences(Settings) > Tools > Mybatis Sql Viewer
計畫地址
https://github.com/linyimin0812/mybatis-sql-viewer
來源:juejin.cn/post/7246365103783673911
>>
END
精品資料,超贊福利,免費領
微信掃碼/長按辨識 添加【技術交流群】
群內每天分享精品學習資料
最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎、並行、JVM、MySQL、Redis、Spring、SpringMVC、SpringBoot、SpringCloud、訊息佇列等多個型別),歡迎您的使用。
👇👇
👇點選"閱讀原文",獲取更多資料(持續更新中)