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

IDEA插件之mybatisx 插件使用教程 MybatisX 是一款基于 IDEA 的快速开发插件,方便在使用mybatis以及mybatis-plus开发时简化繁琐的重复操作,提高开发速率。使用MybatisX能够快速生产mybatis的相关文件,免去手动建立的繁琐过程。 阅读详情

前后端微服务商城项目,手把手教学!

前后端微服务商城项目,手把手教学!

前后端微服务商城项目,手把手教学!

mybatis-sql-viewer插件主要提供能力:

❝

将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描。

❞

1. 简介

虽然写了很久的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?是否都符合开发规范?

e8f85c72b32240a800bbe823de75e8ba.png

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

42abd426db7490a558ce2704ab2edefb.png

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

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

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

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

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

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

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

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

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

e610a8869964f180e346390effd84595.png

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

2. 安装

IDEA中安装:

❝

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

❞

手动安装:

❝

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

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

❞

3. 使用

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

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

9fc7666a006bd4fa2b09f3ecf57e6aa9.png

1. 模式

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

  • mapper接口方法参数mock

  • 随机参数

  • 默认参数

  • 自定义参数

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

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

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

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

1. 非mybatis模式

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

f11f9abf6d678d4308211607a82e1214.png
2. mybatis模式

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

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

1794e46a1c5e2340670fa334fea4c251.jpeg

2. mybatis sql扫描

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

文件维度扫描

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

091988f3cd70c42d1debf83d6f1b5953.jpeg
项目维度

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

6f2e4d25d6252f5ea79934a5db020262.jpeg

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

图标说明
55a409b1b51d309b173576037bbdc336.jpeg
项目维度扫描
  • all: 所有语句

  • compliance with spec: 符合SQL规约要求的SQL语句

  • does not meet spec: 不符合SQL规约的要求的SQL语句

  • full table scan: 存在全表扫描的SQL语句

  • error: 存在错误的SQL语句,可能是SQL编写错误,参数错误,数据库连接错误等

3. SQL语句

1. 语法校验&规约检查

对于「非mybatis模式」需要左栏编写SQL语句,「mybatis」模式则需要在mapper接口或XML文件中点击「sql」图标生成SQL,右栏自动进行语法校验和规规约校验

1. SQL语法校验
8d9df0a1f6e975f40b6cf5b3405e1eb9.jpeg
2. 规约校验
9c8218a053cef0dcae86f9d1df61fe89.jpeg
2. SQL执行

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

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

  • 执行计划: EXPLAIN对应的结果

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

8d0c05fbd57e138963527f552c4f875c.jpeg
3. SQL压测

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

d8118cfad841c16862138215c3923608.jpeg
配置说明

值类型由两种方式组成:

  • 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

a161f4b238082907fbe97d1c5b8d3fab.jpeg

4. 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,如下图所示:

550a0d22d7b09e8272ef867bb64fad0c.jpeg
1. 字段

左栏显示表的字段信息:字段名称、类型、是否可为NULL、默认值、索引、注释说明等信息

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

a3b867727026873df0fd7cc5c084c16a.jpeg
2. 索引

左栏显示表的索引信息

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

d810484d342fa96c77fd8e3328d47f05.jpeg
3. 数据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」按钮,即可进行词库的创建

38bd2d21fe0d41278fdf2c51a34305b0.jpeg

「mock数据预览」

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

ae2a6e90dddee3df6532b09fa7a9f95f.jpeg

「mock数据」

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

10870fae2f63127423a54885f9966689.jpeg

「mock数据清理」

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

dcd4802f92d58bc5d667233693fa40bb.jpeg

4. 配置

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

ca7af3cd073f798d8436aeb873242c8b.jpeg

5. 参考

在实现过程中参考了许多非常优秀的项目,拷贝了很多代码,特此感谢。

  • JDBC压测_性能测试 PTS-阿里云帮助中心

  • SQL Father - 模拟数据生成器(后端)

  • GitHub - q258523454/Java-Mybatis-SQL-Scanner: Java Mybatis SQL Scanner

  • 程序员顺仔:动手撸一个SQL规范检查工具

  • pojo2json

  • mybatis-3

mybatis-sql-viewer开源地址:

❝

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

❞

来源:juejin.cn/post/7246365103783673911

推荐全新学习项目

全新基于springboot+vue+vant的前后端分离的微商城项目,包括手机端微商城项目和后台管理系统,整个电商购物流程已经能流畅支持,涵盖商品浏览、搜索、商品评论、商品规格选择、加入购物车、立即购买、下单、订单支付、后台发货、退货等。功能强大,主流技术栈,非常值得学习。

项目包含2个版本:

  • 基于springboot的单体版本

  • 基于spring cloud alibaba的微服务版本

线上演示:https://www.markerhub.com/vueshop

cbd12c17f6f4f4244f536549631650c3.jpeg

从文档到视频、接口调试、学习看板等方面,让项目学习更加容易,内容更加沉淀。全套视频教程约44小时,共260期,讲解非常详细细腻。下面详细为大家介绍:

架构与业务

使用主流的技术架构,真正手把手教你从0到1如何搭建项目手脚架、项目架构分析、建表逻辑、业务分析、实现等。

单体版本:springboot 2.7、mybatis plus、rabbitmq、elasticsearch、redis

微服务版本:spring cloud alibaba 2021.0.5.0,nacos、seata、openFeign、sentinel

前端:vue 3.2、element plus、vant ui

3a81c8783378861004f01ad9391fd1fb.png

更多详情请查看:

手把手教学,从0开发前后端微商城项目,主流Java技术一网打尽!

手把手教学,从0开发前后端微商城项目,主流Java技术一网打尽!

手把手教学,从0开发前后端微商城项目,主流Java技术一网打尽!

Idea Mybatis插件:提高CRUD效率 将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描 阅读详情

相关推荐

MyBatis-SQL分析组件:优化数据库访问效率

在这篇文章中,我们将介绍MyBatis的SQL分析组件,该组件可以帮助我们分析和优化数据库查询。MyBatis-SQL分析组件为我们提供了一个强大的工具来分析和优化数据库查询。通过使用该组件,我们可以更好地理解和调优我们的SQL语句,从而提高数据库操作的效率和性能。一旦我们获得了SQL语句的分析结果,我们可以使用这些信息来优化查询。要使用MyBatis-SQL分析组件,我们需要在项目的依赖中引入相应的库。对象将包含分析结果的各种信息,例如SQL语句中的参数、表名、列名等。首先,我们需要创建一个。

bug_syntax119的博客 304

mybatis入门

1、搭建mybatis框架环境 搭建maven项目如图 pom.xml 导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

weixin_44222931的博客 761

避开这5个坑!Tushare金融数据获取与分析的常见错误排查指南

本文详细解析了使用Tushare进行金融数据获取与分析时常见的5个问题,包括Token失效、数据缺失、频率限制、数据一致性和性能瓶颈,并提供了实用的解决方案和优化策略。通过Python代码示例和最佳实践,帮助金融数据分析师和量化开发者高效避开这些陷阱,提升工作效率。

x2y3z4a5b的博客 1038

自己动手写一款 IDEA Mybatis 插件:大大提高 CRUD 效率

????这是一个或许对你有用的社群????一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事中“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

weixin_44421461的博客 602

Flink 作业报错——TaskManager连接不上

Flink 作业报错——TaskManager连接不上

lm223的博客 1901

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 351

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

作者:linyimin来源:juejin.cn/post/7246365103783673911mybatis-sql-viewer插件主要提供能力:将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描。简介虽然写了很久的CRUD,但是依旧觉得写好CRUD是一件非常难且麻烦的事情,以下的情况在开发过程中应该...

码农code之路 549

UR5 机械臂手眼标定(Eye-in-Hand)实战:OpenCV 求解 AX=XB,误差 < 2mm

本文详细介绍了UR5机械臂在Eye-in-Hand配置下的手眼标定实战,通过OpenCV实现高精度标定,最终达到误差小于2mm的工业级精度要求。文章涵盖了标定基础原理、环境搭建、数据采集策略、核心算法实现及误差分析与优化,为视觉机械臂的自主抓取提供了实用指南。

weixin_31476015的博客 297

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

Java精选面试题(微信小程序):5000+道面试题和选择题,真实面经,简历模版,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!mybatis-sql-viewer插件主要提供能力:将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、S...

Java精选 327

基于Playwright和反爬虫规避技术的雪球股票讨论数据采集方案

随着量化投资和社交投资的兴起,雪球作为中国领先的投资社交平台,其用户讨论数据成为研究市场情绪的重要来源。本文将详细介绍如何使用最新的Playwright技术和反爬虫规避策略,构建一个高效、稳定的雪球股票讨论爬虫系统。本文详细介绍了基于Playwright的雪球股票讨论爬虫实现方案,涵盖了从基础配置到高级反爬虫策略的各个方面。AI驱动的反爬虫对抗更智能的请求调度算法区块链技术在数据溯源中的应用联邦学习在数据采集中的运用。

2201_76125261的博客 1012

基于OSEK_TP.dll封装通用,多ECU自由切换的诊断函数库

本文介绍了基于CANoe内置OSEK_TP.dll库实现通用诊断通讯的方法。通过封装CAN_TP.cin顶层脚本,实现了ECU连接管理、数据收发和多ECU切换功能。系统采用字典结构存储ECU参数,支持从配置文件读取诊断ID等配置信息,通过TpCreateConnection建立TP层连接。文章详细说明了诊断请求发送函数Uds_DiagSendRequest的实现逻辑,以及如何利用回调函数处理收发事件。该方法无需依赖诊断数据库,通过底层封装实现了灵活高效的诊断通讯方案,适用于车载诊断领域的测试需求。

蚂蚁小兵 1568

告别996!一款 IDEA Mybatis插件:极大提升 CRUD 效率,堪称神器!

扫描结果左侧是mybatis文件的namespace(对于mapper接口名)及其下的方法名,点击具体的方法,右侧产生其对应的SQL语句,并会对该SQL语句进行规约检查、索引检查并输出此SQL语句的的执行计划。预览数据符合要求后,点击「mock」按钮完成数据的插入,默认插入100条数据,通过修改「Mock Rows」的值指定mock记录数,经测试,插入10w条数据花费时间在10秒内,所以可以进行大批量数据mock。点击「result」tab后会自动执行「statement」Tab中的SQL语句。

程序员闪充宝 152

【YOLO】YOLOV5-Seg的Segment模块解析

Segment模块同时输出检测结果和分割掩模,通过轻量级分割头实现实时实例分割

浩瀚之水的专栏 599

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

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享点击关注#互联网架构师公众号,领取架构师全套资料 都在这里0、2T架构师学习资料干货分上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师!mybatis-sql-viewer插件主要提供能力:❝将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis...

emprere的博客 232

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3317

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 升级 JDK17 一个不可拒绝的理由
下一篇: 这是我见过最强的后端面经,拿捏了!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值