Idea Mybatis插件:提高CRUD效率

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

普通开发模式

按照这种开发模式,需要重启好多次应用,对于每次启动都需要几分钟的应用来说开发体验简直就是灾难。基于上述的问题,开发了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数据库章节。

2. 安装

  • IDEA中安装:
  • Preferences(Settings) > Plugins > Marketplace > Search"mybatis sql viewer" > Install
  • 手动安装:
  • 在releases页面中下载最新版本的zip文件
  • Preferences(Settings) > Plugins > ⚙️ > Install plugin from disk… -> 选择下载的文件安装

3. 使用

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

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

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

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

1. 模式

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

  • mapper接口方法参数mock
  • 随机参数
  • 默认参数
  • 自定义参数
  • mapper接口/方法跳转XML文件
  • XML文件跳转mapper接口/方法
  • 基于mock参数将mapper接口方法的xml转换成真实SQL
  • 按照文件/项目维度扫描XML文件,并生成对应的真实SQL语句,并进行规约/索引相关校验

1. 非mybatis模式

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

2. mybatis模式

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

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

2. 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编写错误,参数错误,数据库连接错误等

3. SQL语句

1. 语法校验&规约检查

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

1. SQL语法校验

statement效果之语法校验

2. 规约校验

statement效果之规约检查

2. SQL执行

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

  1. 执行信息包含:执行的语句、执行该条语句的耗时、返回的记录数及表中记录总数
  2. 执行计划:EXPLAIN对应的结果
  3. 执行结果:结果表格,默认只返回100条记录(只有SELECT语句有该信息)

result效果

3. 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

压测报告

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

specify table tab

1. 字段

  1. 左栏显示表的字段信息:字段名称、类型、是否可为NULL、默认值、索引、注释说明等信息
  2. 右栏显示对表进行建表规约检查的结果:如表名、字段名是否包含大写字母或特殊字符等检查

schema tab

2. 索引

  1. 左栏显示表的索引信息
  2. 右栏显示对索引进行规约检查的结果

index tab

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

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

4. 配置

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

配置

5. 参考

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

  1. JDBC压测_性能测试 PTS-阿里云帮助中心
  2. SQL Father - 模拟数据生成器(后端)
  3. GitHub - q258523454/Java-Mybatis-SQL-Scanner: Java Mybatis SQL Scanner
  4. 程序员顺仔:动手撸一个SQL规范检查工具
  5. pojo2json
  6. mybatis-3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31172.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

南京阿里云代理商:阿里云服务器的可扩展性和弹性如何?是否支持按需付费?

南京阿里云代理商:阿里云服务器的可扩展性和弹性如何?是否支持按需付费?   一、阿里云服务器的可扩展性   阿里云作为业界知名的云服务提供商,其服务器具有极强的可扩展性。可扩展性主要体现在以下几方面:   1. …

C++哈希表

目录 介绍哈希概念哈希冲突哈希函数解决哈希冲突 闭散列介绍线性探测二次探测负载因子 实现哈希表结构哈希函数元素查找插入元素删除元素 开散列介绍实现哈希表结构元素查找插入元素删除元素析构函数 介绍 哈希概念 了解过搜索二叉树与红黑树后,它们的结构特点主要…

测试用例excel转word(Office word篇)

场景 我们在项目中,默认情况下是用我们的Excel用例模版输出测试用例。但是有的项目中,会要求在Word版本的测试计划或者测试报告中,写明测试用例。而我们的测试用例,有的项目有上千条,这个时候如果从Excel往Word中复制…

Cortext-M3系统:异常(3)

1、异常 异常响应系统是再M3内核水平上的,支持众多的系统异常和外部中断。1-15为系统异常,大于16为外部中断。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。优先级数值越小,优先级越高。CM3支持中断嵌套&#xff…

MyBatis面试题

什么是 MyBatis? MyBatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生…

机器学习——识别足球和橄榄球

一、选题的背景 橄榄球起源于足球,二者即相似又有所区别。计算机技术发展至今,AI技术也有了极大的进步,通过机器学习不断的训练,AI对于足球和橄榄球的识别能力可以帮助人们对足球和橄榄球的分辨。机器学习是一种智能技术&#xff…

详解Http的Content-Type

目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 1.概述 HTTP(HyperText Transfer Protocol),超文本传输协议。超文本&#xf…

GEE:将地形山体阴影和类别概率信息结合起来,绘制概率山体阴影(Probability Hillshade)图

作者:CSDN @ _养乐多_ 本文将介绍使用哨兵数据将地形山体阴影和类别概率信息结合起来,绘制概率山体阴影图的代码。 “Probability Hillshade”(概率山体阴影)是指使用Dynamic World数据集中最可能的类别概率信息创建的一种可视化效果。它结合了地形山体阴影和类别概率信息…

【pytorch】新的windows电脑从头搭建pytorch深度学习环境(完整版+附安装包)

文章目录 新的windows电脑搭建pytorch深度学习环境电脑环境的配置显卡驱动cudacudnn pytorch开发软件的安装minicondavscode pytorch环境的安装conda安装python环境安装pytorch和torchvision 附录1:部分torch、torchvision、torchaudio版本对应关系附录2&#xff1a…

iOS App 上架流程图文教学

在上架App 之前必须先准备好开发者帐号,但申请开发者帐号因法兰克早在之前已经申请好了,故就跳过此步骤,直接从产生凭证到上传App开始讲起。首先,要将自己辛苦写好的App 送审的话,则要依序做完下列几件事情即可。 在开…

常见面试题之框架篇

1.Spring框架中的单例bean是线程安全的吗? 不是线程安全的,是这样的。 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求对应的业务逻辑(成员方法),…

TensorFlow Core—基本分类:对服装图像进行分类

现在人工智能很火的,看到了这篇文章,给自己普及一下基础知识,也分享给大家,希望对大家有用。 本指南将训练一个神经网络模型,对运动鞋和衬衫等服装图像进行分类。即使您不理解所有细节也没关系;这只是对完…

3ds Max - Pivot Painter Tool

很久之前的笔记,整理归档; Pivot Painter Tool是3dsMax中的插件,主要是辅助将Mesh中每个Element生成自己的Pivot Position,方便如使用World Position Offset对每个Element进行精确控制,导入使用Pivot Painter Tool工具…

二进制搭建 Kubernetes v1.20

k8s集群master01:192.168.179.25 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02:192.168.179.26 k8s集群node01:192.168.179.23 kubelet kube-proxy docker k8s集群node02:192.168.179.22 …

统信UOS系统开发笔记(六):提取在线安装软件后,提取其安装包,部署目标机使用离线软件包方式安装软件

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131348876 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

【性能设计篇】数据库拓展

前两篇文章介绍了分布式存储的机制,为保证数据的高性能以及可拓展,采用分片/分区机制。为保证数据的高可用性,采用复制/镜像机制存储数据。一份数据存储多份。而这两种方式在数据中,就是分片/分区机制。分库分表/读写分离。 读写…

深入理解深度学习——Transformer:解码器(Decoder)部分

分类目录:《深入理解深度学习》总目录 相关文章: 注意力机制(Attention Mechanism):基础知识 注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson核回归 注意力机制&…

一文了解RabbitMQ安装使用

什么是RabbitMQ? 官网:Messaging that just works — RabbitMQ RabbitMQ是一种开源的消息中间件软件,用于构建可扩展的分布式应用程序。它实现了高级消息队列协议(AMQP),这是一种网络协议,用于在应用程序之…

C++ 新的类型转换

文章目录 前言一、静态转换(static_cast)二、动态转换(dynamic_cast):三、常量转换(const_cast):四、重新解释转换(reinterpret_cast):总结 前言 …

【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认

💧 【 R a b b i t M Q 教程】第三章—— R a b b i t M Q − 发布确认 \color{#FF1493}{【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认} 【RabbitMQ教程】第三章——RabbitMQ−发布确认💧 🌷 仰望天空,妳我亦是行人…