一款IDEA MyBatis插件:极大提升CRUD效率,堪称神器!

作者:linyimin

来源:juejin.cn/post/7246365103783673911

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?是否都符合开发规范?

3fe336821b65deb13039845abe23ac19.jpeg
普通开发模式

按照这种开发模式,需要重启好多次应用,对于每次启动都需要几分钟的应用来说开发体验简直就是灾难。基于上述的问题,开发了mybatis-sql-viewer插件,基于此插件可以实现以下能力而不需要启动应用:

35c7cbdb7049a69ed7800992334f4f2f.jpeg
mybatis-sql-viewer能力

基于此插件以上的问题在编码阶段即可解决:

  • SQL的编写好麻烦,写错了SQL字段或者表名称,修改完需要重启 --> 语法校验

  • SQL编写好后进行测试时,造数据麻烦,特别是存在表关联的情况,数据内容不真实,容易超出字段长度报错 --> 多种数据mock方式,自动关联

  • SQL好不容易跑起来了,又会有以下的疑问:

    • 符不符合SQL开发规范?--> SQL规范检查

    • 是否能命中索引,可能命中哪个索引?--> SQL索引检查&SQL执行计划

    • 日常环境数据量太少,如何模拟SQL在生产环境下运行的真实情况?--> 支持大批量数据mock

    • 性能怎么样,最大TPS可以达到多少?数量大时是否会存在慢SQL?--> SQL语句压测,结果一目了然

基于此插件可以提高CRUD的效率及SQL质量,开发流程可以转换为如下模式:

68b044945eff7b8bb584eb9b6c1dea87.jpeg
基于mybatis-sql-viewer插件的开发流程

上述的规约均来自《阿里巴巴Java开发手册》中的MySQL数据库章节。

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + JDK 17 + Vue 实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

  • Boot项目:https://github.com/macrozheng/mall

  • Cloud项目:https://github.com/macrozheng/mall-swarm

  • 视频教程:https://www.macrozheng.com/video/

项目演示:850f2f81bd5e31572ffdcf714a4f9077.gif

安装

  • IDEA中安装:

  • Preferences(Settings) > Plugins > Marketplace > Search"mybatis sql viewer" > Install

  • 手动安装:

  • 在releases页面中下载最新版本的zip文件

  • Preferences(Settings) > Plugins > ⚙️ > Install plugin from disk... -> 选择下载的文件安装

使用

因为需要拉取数据库表的元数据信息、执行SQL,所以使用前需要配置一下数据源。

支持多数据源配置,点击「datasource」按钮即可完成数据源的创建、选择、删除、测试。

9f72713b0d760d8982824d0d44bf2f35.jpeg

模式

此插件有两种模式:mybatis模式和非mybatis模式。差别在于mybatis模式支持以下功能:

  • mapper接口方法参数mock

  • 随机参数

  • 默认参数

  • 自定义参数

  • mapper接口/方法跳转XML文件

  • XML文件跳转mapper接口/方法

  • 基于mock参数将mapper接口方法的xml转换成真实SQL

  • 按照文件/项目维度扫描XML文件,并生成对应的真实SQL语句,并进行规约/索引相关校验

非mybatis模式

将mybatis mode的勾选框关闭即可使用非mybatis模式,然后在「statement」Tab左栏手写SQL即可。

f1fd4d5af91283e6b7bab78f6af66858.jpeg
mybatis模式

将mybatis mode的勾选框选中即可使用mybatis模式,mybatis模式主要添加了mapper接口方法参数mock、文件跳转及mybatis文件扫描的功能。

在mapper接口或XML文件中点击「sql」图标,即可生成mapper方法参数随机值,如果对生成的随机不满意或不满足条件,可以手动修改进行自定义。然后点击「statement」Tab即可使用该参数将mybatis的xml实现转换成真实的SQL语句。

34053cf55f3aedbcedd38a00743a6a18.jpeg

mybatis sql扫描

支持文件和项目两个维度扫描。

  • 文件维度扫描

点击或者namespace对应的mapper接口旁边的「sql」图标即可完成文件维度mybatis sql的扫描

600d2c8ebd37f1b7ef1bb99e45ce829b.jpeg
文件维度扫描
  • 项目维度

点击「mybatis sql scan」即可进行项目维度mybatis sql的扫描

6b1e5fbfd20f5346c144c1de29c9f6c9.jpeg
项目维度扫描

扫描结果左侧是mybatis文件的namespace(对于mapper接口名)及其下的方法名,点击具体的方法,右侧产生其对应的SQL语句,并会对该SQL语句进行规约检查、索引检查并输出此SQL语句的的执行计划

  • 图标说明

82d1a8e9dbfe0bdc5a2842a747adbed4.jpeg
  • 项目维度扫描

    • 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语法校验

3bd07842f2920d1c8a378295c3d9a6c7.jpeg
statement效果之语法校验

2. 规约校验

300a25caa2702e3f5e3e5a299ace4c01.jpeg
statement效果之规约检查
SQL执行

点击「result」tab后会自动执行「statement」Tab中的SQL语句。执行结果由3部分组成:执行信息、执行计划及执行结果。

  1. 执行信息包含:执行的语句、执行该条语句的耗时、返回的记录数及表中记录总数

  2. 执行计划:EXPLAIN对应的结果

  3. 执行结果:结果表格,默认只返回100条记录(只有SELECT语句有该信息)

42e1a2f18711d04729ee323371d3de9b.jpeg
result效果
SQL压测

点击「stress」Tab进行压测配置,配置页面如下:

1da42a41e19a8f5d9333120b8dcd9d03.jpeg
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

3445387c7d32c8dfebfab899ab8240ce.jpeg
压测报告
SQL表

点击「table」Tab时会对「statement」Tab中的SQL语句进行解析,提取出表名称,然后每个表作为一个Tab。如以下语句:

SELECT
    state
FROM
    CITY
WHERE
    country_name IN (
        SELECT
            name
        FROM
            COUNTRY
        WHERE
            id IN (1, 2, 3)
    )

SQL语句中包含了两个表:CITY和COUNTRY,所以会产生两个Tab,如下图所示:

99b96bcb853f65594cc46a6f41ec9a1c.jpeg
specify table tab
字段
  1. 左栏显示表的字段信息:字段名称、类型、是否可为NULL、默认值、索引、注释说明等信息

  2. 右栏显示对表进行建表规约检查的结果:如表名、字段名是否包含大写字母或特殊字符等检查

1484241405c3176559882659e43d39ea.jpeg
schema tab
索引
  1. 左栏显示表的索引信息

  2. 右栏显示对索引进行规约检查的结果

68ed93814ea2e15cc32f4d58bd3484b7.jpeg
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」按钮,即可进行词库的创建

157865d8000017e9f692d884c49072df.jpeg
lexicon create

mock数据预览

配置好mock配置后,可以点击「preview」按钮进行mock数据的预览,默认会生成50条数据

7abf119e5df3602f4ceed1abca536ce5.jpeg
mock preview

mock数据

预览数据符合要求后,点击「mock」按钮完成数据的插入,默认插入100条数据,通过修改「Mock Rows」的值指定mock记录数,经测试,插入10w条数据花费时间在10秒内,所以可以进行大批量数据mock。

d10e32e45fb400b3ac5227ae5274fa87.jpeg
mock result

mock数据清理

mock数据完成后,会存储主键id的范围(持久化存储到本地文件),在对SQL语句进行压测完成后,可以进行清理,避免污染日常真实的测试数据。点击「Clean」按钮即可完成清理工作

799d31c1523e5dfb5f079fc4deea2d66.jpeg
mock clean

配置

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

bcc950b0b9be82059ec55525b3c86369.jpeg
配置

项目地址

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于IDEAMyBatis插件,有一些常用的插件可以提供便利的功能。其中,Free Mybatis Plugin是一个免费的插件,可以在MyBatis框架下,实现mapper接口和对应的xml文件之间的快速跳转。 该插件能够解决在调试过程中,xml文件无法像Java文件一样快速跳转的问题,为开发人员提供了便利。此外,还有其他一些常用的MyBatis插件,如MyBatis Generator和MyBatis Tools,它们提供了代码生成和辅助开发的功能。 安装完成后,根据实际需要进行配置,例如配置生成命令等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mybatis入门](https://blog.csdn.net/weixin_44222931/article/details/103511806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [idea插件mybatis框架下mapper接口快速跳转对应xml文件)亲测好用](https://blog.csdn.net/qq_38377190/article/details/93379140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值