Skip to content

Commit ecaaa0f

Browse files
committed
feat: add docs
1 parent 0ed8021 commit ecaaa0f

32 files changed

+320
-415
lines changed

README.md

Lines changed: 262 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,272 @@
1+
[![Downloads](https://img.shields.io/jetbrains/plugin/d/18713-mybatis-sql-viewer)](https://plugins.jetbrains.com/plugin/18713-mybatis-sql-viewer)
2+
[![Version](https://img.shields.io/jetbrains/plugin/v/18713.svg?label=version)](https://plugins.jetbrains.com/plugin/18713-mybatis-sql-viewer)
3+
[![](https://sonarcloud.io/api/project_badges/measure?project=linyimin-bupt_mybatis-sql-viewer&metric=alert_status)](https://sonarcloud.io/project/overview?id=linyimin-bupt_mybatis-sql-viewer)
4+
15
[中文](README.md) |
26
[ENGLISH](README_EN.md)
37

4-
## 简介
8+
# 简介
9+
10+
虽然写了很久的CRUD,但是依旧觉得写好CRUD是一件非常难且麻烦的事情,以下的情况在开发过程中应该都遇到过:
11+
12+
- SQL测试好麻烦,写错了SQL字段或者表名称,修改完要重启(几分钟过去了)
13+
- 造数据好麻烦,特别是还存在表关联的情况,数据内容不真实,还容易超出字段长度,让人抓狂
14+
- SQL好不容易能跑了,又会有以下的疑问
15+
- 符不符合SQL开发规范?
16+
- 是否能命中索引?
17+
- 性能怎么样,是否会存在慢SQL?
18+
- 日常环境数据太少,如何模拟SQL在线上运行的真实情况?
19+
20+
对于使用Mybatis的开发者还会存在这些问题:
21+
22+
- Mapper接口方法和XML标签不对应,修改完要重启(又几分钟过去了)
23+
- XML中多写了一个`,`,又没有错误提示,接口测试调用时才发现,修改完又又要重启(好多个几分钟过去了)
24+
- 这个Mapper接口对应的是哪个XML文件?找找十几秒过去了
25+
- 这个XMl文件对应的是哪个Mapper接口?找找十几秒又过去了
26+
- 这个项目中有多少个XML文件?里面是否存在慢SQL?是否都符合开发规范?
27+
28+
![普通开发流程](./docs/dev_process.svg)
29+
30+
按照这种开发模式,需要重启好多次应用,对于每次启动都需要几分钟应用来说开发体验简直就是灾难。基于上述的问题,开发了mybatis-sql-viewer插件,基于此插件可以实现以下能力而不需要启动应用:
31+
32+
![mybatis-sql-viewer能力](./docs/mybatis-sql-viewer_function.svg)
33+
34+
基于此插件可以提高CRUD的效率及SQL质量,开发流程可以转换为如下模式:
35+
36+
![基于mybatis-sql-viewer插件的开发流程](./docs/mybatis-sql-viewer_dev_process.svg)
37+
38+
上述的规约均来自《阿里巴巴Java开发手册》中的MySQL数据库章节。
39+
40+
# 安装
41+
42+
`IntelliJ IDEA` > `Preferences` > `Plugins` > `Marketplace` > `Search for "mybatis sql viewer"` > `Install Plugin` > `Restart IntelliJ IDEA`
43+
44+
# 使用
45+
46+
此插件有两种模式:mybatis模式和非mybatis模式。差别在于mybatis模式支持以下功能:
47+
48+
- mapper接口方法参数mock
49+
- 随机参数
50+
- 默认参数
51+
- 自定义参数
52+
- mapper接口/方法跳转XML文件
53+
- XML文件跳转mapper接口/方法
54+
- 基于mock参数将mapper接口方法的xml转换成真实SQL
55+
- 按照文件/项目维度扫描XML文件,并生成对应的真实SQL语句,并进行规约/索引相关校验
56+
57+
因为需要拉取数据库表的元数据信息、执行SQL,所以使用前需要配置一下数据源。支持多数据源配置,点击「datasource」按钮即可完成数据源的创建、选择、删除、测试。
58+
59+
![](./docs/datasource.jpg)
60+
61+
## 非mybatis模式
62+
63+
`mybatis mode`的勾选框关闭即可使用`非mybatis模式`,然后在「statement」Tab左栏手写SQL即可。
64+
65+
![](./docs/mybatis-mode.jpg)
66+
67+
## mybatis模式
68+
69+
`mybatis mode`的勾选框选中即可使用`mybatis模式``mybatis模式`主要添加了mapper接口方法参数mock、文件跳转及mybatis文件扫描的功能。
70+
71+
在mapper接口或XML文件中点击「sql」图标,即可生成mapper方法参数随机值,如果对生成的随机不满意或不满足条件,可以手动修改进行自定义。然后点击「statement」Tab即可使用该参数将mybatis的xml实现转换成真实的SQL语句。
72+
73+
![随机参数](./docs/param_random.jpg)
74+
75+
### mybatis sql扫描
76+
77+
支持文件和项目两个维度扫描。
78+
79+
1. 文件维度扫描
80+
81+
点击`<mapper namespace="xxx.xxx.xxx">`或者`namespace`对应的mapper接口旁边的「sql」图标即可完成文件维度mybatis sql的扫描
82+
83+
![文件维度扫描](./docs/scan_file.jpg)
84+
85+
2. 项目维度
86+
87+
点击「mybatis sql scan」即可进行项目维度mybatis sql的扫描
88+
89+
![项目维度扫描](./docs/scan_project.jpg)
90+
91+
扫描结果左侧是mybatis文件的namespace(对于mapper接口名)及其下的方法名,点击具体的方法,右侧产生其对应的SQL语句,并会对该SQL语句进行规约检查、索引检查并输出此SQL语句的的执行计划
92+
93+
**图标说明**
94+
95+
![](./docs/major.svg):表示SQL规约检查和索引检查均符合要求的SQL语句
96+
97+
![](./docs/not_meet_spec.svg):表示SQL规约检查不符合要求的SQL语句
98+
99+
![](./docs/full_text_search.svg):表示索引检查不符合要求的SQL语句,可能存在全表扫描(含索引的全表扫描)
100+
101+
![](./docs/error.svg):表示生成的SQL语句存在问题:可能是SQL编写错误,参数错误,数据库连接错误等
102+
103+
**可通过单选框选择对应的条件进行过滤**
104+
105+
- all:所有语句
106+
- compliance with spec:符合SQL规约要求的SQL语句
107+
- does not meet spec:不符合SQL规约的要求的SQL语句
108+
- full table scan:存在全表扫描的SQL语句
109+
- error:存在错误的SQL语句,可能是SQL编写错误,参数错误,数据库连接错误等
110+
111+
112+
## 「sql」Tab
113+
114+
### 1. 「statement」Tab
115+
116+
对于「非mybatis模式」需要左栏编写SQL语句,「mybatis」模式则需要在mapper接口或XML文件中点击「sql」图标生成SQL,右栏自动进行语法校验和规规约校验
117+
118+
1. SQL语法校验
119+
120+
![statement效果之语法校验](./docs/sql_statement_syntax.jpg)
121+
122+
2. 规约校验
123+
124+
![statement效果之规约检查](./docs/sql_statement_rule.jpg)
125+
126+
### 2. 「result」Tab
127+
128+
点击「result」tab后会自动执行「statement」Tab中的SQL语句。执行结果由3部分组成:执行信息、执行计划及执行结果。
129+
130+
1. 执行信息包含:执行的语句、执行该条语句的耗时、返回的记录数及表中记录总数
131+
2. 执行计划:EXPLAIN对应的结果
132+
3. 执行结果:结果表格,默认只返回100条记录(只有SELECT语句有该信息)
133+
134+
![result效果](./docs/result.jpg)
135+
136+
### 3. 「stress」Tab
137+
138+
点击「stress」Tab进行压测配置,配置页面如下:
139+
140+
![stress配置](./docs/stress_config.jpg)
141+
142+
**配置说明**
143+
144+
1. 值类型由两种方式组成:
145+
1. `use sql directly`:表示直接使用「statement」Tab中的SQL语句进行压测
146+
2. `configure parameters`:表示对「statement」Tab中的SQL语句的条件进行参数配置。
147+
2. 流量模型也是由两种方式组成(与并发数有关):
148+
1. `increase in a constant rate`:并发数按照固定速率增长,增长速率由「递增时长」指定
149+
2. `fixed concurrent number`:直接按照指定并发数进行压测
150+
3. 递增时长:指定并发数的增长速率,单位为秒
151+
4. 并发数:同时执行SQL语句的线程数
152+
5. 压测时长:指定压测时间,单位为分钟,**因为压测的指标数据直接存在内存中,应该避免压测时间过长造成Idea OOM**
153+
154+
配置完成后,点击「stress」按钮即可进行压测,并自动跳转到压测报告「report」Tab
155+
156+
**压测报告**
157+
158+
压测报告中主要包含指标:
159+
160+
- 请求成功率
161+
- TP99
162+
- TP90
163+
- 最大RT
164+
- 平均RT
165+
- 最大TPS
166+
- 平均TPS
167+
- 并发数
168+
- 异常数
169+
- 总请求数
170+
171+
图表包含:
172+
- 请求成功率
173+
- 平均RT
174+
- TPS
175+
176+
![压测报告](./docs/stress_report.jpg)
177+
178+
## 「table」Tab
179+
180+
点击「table」Tab时会对「statement」Tab中的SQL语句进行解析,提取出表名称,然后每个表作为一个Tab。如以下语句:
181+
182+
```mysql
183+
SELECT
184+
state
185+
FROM
186+
CITY
187+
WHERE
188+
country_name IN (
189+
SELECT
190+
name
191+
FROM
192+
COUNTRY
193+
WHERE
194+
id IN (1, 2, 3)
195+
)
196+
```
197+
198+
SQL语句中包含了两个表:`CITY``COUNTRY`,所以会产生两个Tab,如下图所示:
199+
200+
![specify table tab](./docs/specify_table.jpg)
201+
202+
### 1. 「schema」Tab
203+
204+
1. 左栏显示表的字段信息:字段名称、类型、是否可为NULL、默认值、索引、注释说明等信息
205+
2. 右栏显示对表进行建表规约检查的结果:如表名、字段名是否包含大写字母或特殊字符等检查
206+
207+
![schema tab](./docs/schema_tab.jpg)
208+
209+
### 2. 「index」Tab
210+
211+
1. 左栏显示表的索引信息
212+
2. 右栏显示对索引进行规约检查的结果
213+
214+
![schema tab](./docs/schema_index.jpg)
215+
216+
### 3. 「mock」Tab
217+
218+
mock表数据,支持批量数据mock,左栏进行mock数据类型配置,右栏显示mock结果
219+
220+
**mock规则**
221+
222+
左栏表单中「Mock Type」和「Mock Value」进行mock配置。初始化时,已经按照字段类型设置了默认的配置,可以按照需求进行修改。支持多种mock数据规则:
223+
224+
- random:随机值
225+
- string
226+
- name:姓名
227+
- datetime:形如:2023-01-01 00:00:00
228+
- integer
229+
- decimal
230+
- date:形如2023-01-01
231+
- timestamp
232+
- time:形如18:00:00
233+
- year:形如2023
234+
- city
235+
- url
236+
- email
237+
- ip
238+
- university
239+
- phone
240+
- lexicon:自定义词库
241+
- database:数据库,需要填写`table.field`
242+
- increment:递增
243+
- fixed:固定值
244+
- regex:正则
245+
- none:不进行mock,生成insert语句时包含此字段
246+
247+
248+
**词库创建**
249+
250+
点击「lexicon」按钮,即可进行词库的创建
251+
252+
![lexicon create](./docs/lexicon_create.jpg)
253+
254+
**mock数据预览**
255+
256+
配置好mock配置后,可以点击「preview」按钮进行mock数据的预览,默认会生成50条数据
257+
258+
![mock preview](./docs/mock_preview.jpg)
259+
260+
**mock数据**
5261

6-
Mybatis-Sql-Viewer是一款增强idea对mybatis支持的插件,主要功能如下:<br/>
7-
<ul>
8-
<li>快速从代码跳转到mapper及从mapper返回代码</li>
9-
<li>mapper文件中的xml语句/方法转换成sql语句,支持参数mock、数据源配置、sql执行</li>
10-
</ul>
262+
预览数据符合要求后,点击「mock」按钮完成数据的插入,默认插入100条数据,通过修改「Mock Rows」的值指定mock记录数,经测试,插入10w条数据花费时间在10秒内,所以可以进行大批量数据mock。
11263

12-
## 安装
264+
![mock result](./docs/mock_result.jpg)
13265

14-
`IntelliJ IDEA` > `Preferences` > `Plugins` > `Marketplace` > `Search for "mybatis sql view"` > `Install Plugin` > `Restart IntelliJ IDEA`
266+
**mock数据清理**
15267

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

18-
![](./src/main/resources/images/how-to-use.gif)
270+
![mock clean](./docs/mock_clean.jpg)
19271

20-
## 注意
21272

22-
由于使用了mybatis包将xml转成sql语句,会对整个项目进行编译,第一次使用时,加载会有一定耗时,请耐心等待。

README_EN.md

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,4 @@
11
[中文](README.md) |
22
[ENGLISH](README_EN.md)
33

4-
## Description
5-
6-
Mybatis-Sql-Viewer is an enhanced plugin for idea to support mybatis,here is the main functions:
7-
<ul>
8-
<li>navigate from the code to mapper and from the mapper back to code</li>
9-
<li>The xml statement/method in the mapper file convert to sql statement, which supports parameters mock, data source configuration, and sql execution</li>
10-
</ul>
11-
12-
## Install
13-
14-
`IntelliJ IDEA` > `Preferences` > `Plugins` > `Marketplace` > `Search for "mybatis sql view"` > `Install Plugin` > `Restart IntelliJ IDEA`
15-
16-
## How to Use
17-
18-
![](./src/main/resources/images/how-to-use.gif)
19-
20-
21-
## Notice
22-
23-
Since the mybatis package is used to convert xml to sql statements, the entire project will be compiled, and the first time you use it, the loading will be take some time, so please be patient.
4+
TO BE CONTINUE

build.gradle

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,28 @@ intellij {
3737
patchPluginXml {
3838
changeNotes = """
3939
<h4>2.0.0</h4>
40+
<ul>
41+
<li>Supports mybatis mode and non-mybatis mode</li>
42+
<li>SQL specification check</li>
43+
<li>SQL index check</li>
44+
<li>SQL stress</li>
45+
<li>Table-building specification check</li>
46+
<li>Table index specification check</li>
47+
<li>Table data mock</li>
48+
<li>Supports file and project dimensions MyBatis SQL scanning</li>
49+
</ul>
50+
<ul>
51+
<li>支持mybatis模式和非mybatis模式</li>
52+
<li>SQL规约检查</li>
53+
<li>SQL索引检查</li>
54+
<li>SQL压测</li>
55+
<li>建表规约检查</li>
56+
<li>索引规约检查</li>
57+
<li>批量表数据mock</li>
58+
<li>支持文件及项目维度mybatis sql扫描</li>
59+
</ul>
60+
61+
<h4>1.0.6</h4>
4062
<ul>
4163
<li>Support @Insert, @Delete, @Update and @Select annotations</li>
4264
<li>Beautify the style of SQL and JSON</li>

docs/datasource.jpg

209 KB
Loading

docs/datasource_button.jpg

188 KB
Loading

docs/dev_process.svg

Lines changed: 1 addition & 0 deletions
Loading

docs/error.svg

Lines changed: 3 additions & 0 deletions
Loading

docs/full_text_search.svg

Lines changed: 3 additions & 0 deletions
Loading

docs/lexicon_create.jpg

265 KB
Loading

docs/major.svg

Lines changed: 9 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)