當前位置: 妍妍網 > 碼農

一款IDEA MyBatis外掛程式:極大提升CRUD效率,堪稱神器!

2023-01-01碼農

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外掛程式,基於此外掛程式可以實作以下能力而不需要啟動套用:

    mybatis-sql-viewer能力

    基於此外掛程式以上的問題在編碼階段即可解決:

  • SQL的編寫好麻煩,寫錯了SQL欄位或者表名稱,修改完需要重新開機 --> 語法校驗

  • SQL編寫好後進行測試時,造數據麻煩,特別是存在表關聯的情況,數據內容不真實,容易超出欄位長度報錯 --> 多種數據mock方式,自動關聯

  • SQL好不容易跑起來了,又會有以下的疑問:

  • 符不符合SQL開發規範?--> SQL規範檢查

  • 是否能命中索引,可能命中哪個索引?--> SQL索引檢查&SQL執行計劃

  • 日常環境數據量太少,如何模擬SQL在生產環境下執行的真實情況?--> 支持大批次數據mock

  • 效能怎麽樣,最大TPS可以達到多少?數量大時是否會存在慢SQL?--> SQL語句壓測,結果一目了然

  • 基於此外掛程式可以提高CRUD的效率及SQL品質,開發流程可以轉換為如下模式:

    基於mybatis-sql-viewer外掛程式的開發流程

    上述的規約均來自【阿裏巴巴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語法校驗

    statement效果之語法校驗

    2. 規約校驗

    statement效果之規約檢查

    SQL執行

    點選「result」tab後會自動執行「statement」Tab中的SQL語句。執行結果由3部份組成:執行資訊、執行計劃及執行結果。

    1. 執行資訊包含:執行的語句、執行該條語句的耗時、返回的記錄數及表中記錄總數

    2. 執行計劃:EXPLAIN對應的結果

    3. 執行結果:結果表格,預設只返回100條記錄(只有SELECT語句有該資訊)

    result效果

    SQL壓測

    點選「stress」Tab進行壓測配置,配置頁面如下:

    stress配置
  • 配置說明

    1. 值型別由兩種方式組成:

      1. use sql directly:表示直接使用「statement」Tab中的SQL語句進行壓測

      2. configure parameters:表示對「statement」Tab中的SQL語句的條件進行參數配置。

    2. 流量模型也是由兩種方式組成(與並行數有關):

      1. increase in a constant rate:並行數按照固定速率增長,增長速率由「遞增時長」指定

      2. fixed concurrent number:直接按照指定並行數進行壓測

    3. 遞增時長:指定並行數的增長速率,單位為秒

    4. 並行數:同時執行SQL語句的執行緒數

    5. 壓測時長:指定壓測時間,單位為分鐘,因為壓測的指標數據直接存在記憶體中,應該避免壓測時間過長造成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 (123)
    )

    SQL語句中包含了兩個表:CITY和COUNTRY,所以會產生兩個Tab,如下圖所示:

    specify table tab
    欄位
    1. 左欄顯示表的欄位資訊:欄位名稱、型別、是否可為NULL、預設值、索引、註釋說明等資訊

    2. 右欄顯示對表進行建表規約檢查的結果:如表名、欄位名是否包含大寫字母或特殊字元等檢查

    schema tab
    索引
    1. 左欄顯示表的索引資訊

    2. 右欄顯示對索引進行規約檢查的結果

    index tab
    數據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

  • email

  • ip

  • university

  • phone

  • lexicon:自訂詞庫

  • database:資料庫,需要填寫table.field

  • increment:遞增

  • fixed:固定值

  • regex:正則

  • none:不進行mock,生成insert語句時不包含此欄位

  • 詞庫建立

    點選「lexicon」按鈕,即可進行詞庫的建立

    lexicon create

    mock數據預覽

    配置好mock配置後,可以點選「preview」按鈕進行mock數據的預覽,預設會生成50條數據

    mock preview

    mock數據

    預覽數據符合要求後,點選「mock」按鈕完成數據的插入,預設插入100條數據,透過修改「Mock Rows」的值指定mock記錄數,經測試,插入10w條數據花費時間在10秒內,所以可以進行大批次數據mock。

    mock result

    mock數據清理

    mock數據完成後,會儲存主鍵id的範圍(持久化儲存到本地檔),在對SQL語句進行壓測完成後,可以進行清理,避免汙染日常真實的測試數據。點選「Clean」按鈕即可完成清理工作

    mock clean

    配置

    相關配置:Preferences(Settings) > Tools > Mybatis Sql Viewer

    配置

    計畫地址

    https://github.com/linyimin0812/mybatis-sql-viewer

    來源:juejin.cn/post/7246365103783673911

    >>

    END

    精品資料,超贊福利,免費領

    微信掃碼/長按辨識 添加【技術交流群

    群內每天分享精品學習資料

    最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎並行JVMMySQLRedisSpringSpringMVCSpringBootSpringCloud訊息佇列等多個型別),歡迎您的使用。

    👇👇

    👇點選"閱讀原文",獲取更多資料(持續更新中