11
11
[ 中文] ( README.md ) |
12
12
[ ENGLISH] ( README_EN.md )
13
13
14
- # 简介
14
+ # 1. 简介
15
15
16
16
虽然写了很久的CRUD,但是依旧觉得写好CRUD是一件非常难且麻烦的事情,以下的情况在开发过程中应该都遇到过:
17
17
18
- - SQL测试好麻烦 ,写错了SQL字段或者表名称,修改完要重启(几分钟过去了)
19
- - 造数据好麻烦 ,特别是还存在表关联的情况,数据内容不真实,还容易超出字段长度,让人抓狂
18
+ - SQL的编写需要细心 ,写错了SQL字段或者表名称,修改完要重启(几分钟过去了)
19
+ - SQL编写好后进行测试时,造数据也好麻烦 ,特别是还存在表关联的情况,数据内容不真实,还容易超出字段长度,让人抓狂
20
20
- SQL好不容易能跑了,又会有以下的疑问
21
21
- 符不符合SQL开发规范?
22
- - 是否能命中索引?
23
- - 性能怎么样,是否会存在慢SQL?
24
- - 日常环境数据太少,如何模拟SQL在线上运行的真实情况?
22
+ - 是否能命中索引?又可能命中哪个索引?
23
+ - 日常环境数据太少,如何模拟SQL在生产环境下运行的真实情况?
24
+ - 性能怎么样,最大TPS可以达到多少?数量大时是否会存在慢SQL?
25
+ - TP99/TP90、最大RT/平均RT、平均TPS是多少呢?
25
26
26
27
对于使用Mybatis的开发者还会存在这些问题:
27
28
28
29
- Mapper接口方法和XML标签不对应,修改完要重启(又几分钟过去了)
29
- - XML中多写了一个 ` , ` ,又没有错误提示,接口测试调用时才发现,修改完又又要重启(好多个几分钟过去了)
30
+ - XML中多写了一个逗号或者分号 ,又没有错误提示,接口测试调用时才发现,修改完又又要重启(好多个几分钟过去了)
30
31
- 这个Mapper接口对应的是哪个XML文件?找找十几秒过去了
31
32
- 这个XMl文件对应的是哪个Mapper接口?找找十几秒又过去了
32
- - 这个项目中有多少个XML文件?里面是否存在慢SQL?是否都符合开发规范?
33
+ - 这个项目中有多少个XML文件?有多少SQL语句? 里面是否存在慢SQL?是否都符合开发规范?
33
34
34
35
![ 普通开发流程] ( ./docs/dev_process.svg )
35
36
36
37
按照这种开发模式,需要重启好多次应用,对于每次启动都需要几分钟的应用来说开发体验简直就是灾难。基于上述的问题,开发了mybatis-sql-viewer插件,基于此插件可以实现以下能力而不需要启动应用:
37
38
38
39
![ mybatis-sql-viewer能力] ( ./docs/mybatis-sql-viewer_function.svg )
39
40
41
+ 基于此插件以上的问题在** 编码阶段** 即可解决:
42
+
43
+ - SQL的编写好麻烦,写错了SQL字段或者表名称,修改完需要重启 --> ** 语法校验**
44
+ - SQL编写好后进行测试时,造数据麻烦,特别是存在表关联的情况,数据内容不真实,容易超出字段长度报错 --> ** 多种数据mock方式,自动关联**
45
+ - SQL好不容易跑起来了,又会有以下的疑问:
46
+ - 符不符合SQL开发规范? --> ** SQL规范检查**
47
+ - 是否能命中索引,可能命中哪个索引? --> ** SQL索引检查&SQL执行计划**
48
+ - 日常环境数据量太少,如何模拟SQL在生产环境下运行的真实情况? --> ** 支持大批量数据mock**
49
+ - 性能怎么样,最大TPS可以达到多少?数量大时是否会存在慢SQL? --> ** SQL语句压测,结果一目了然**
50
+
40
51
基于此插件可以提高CRUD的效率及SQL质量,开发流程可以转换为如下模式:
41
52
42
53
![ 基于mybatis-sql-viewer插件的开发流程] ( ./docs/mybatis-sql-viewer_dev_process.svg )
43
54
44
55
上述的规约均来自《阿里巴巴Java开发手册》中的MySQL数据库章节。
45
56
46
- # 安装
57
+ # 2. 安装
47
58
48
59
- ** IDEA中安装:**
49
60
- <kbd >Preferences(Settings)</kbd > > <kbd >Plugins</kbd > > <kbd >Marketplace</kbd > > <kbd >Search<b >"mybatis sql viewer"</b ></kbd > > <kbd >Install</kbd >
52
63
- 在[ releases] ( https://github.com/linyimin-bupt/mybatis-sql-viewer/releases ) 页面中下载最新版本的zip文件
53
64
- <kbd >Preferences(Settings)</kbd > > <kbd >Plugins</kbd > > <kbd >⚙️</kbd > > <kbd >Install plugin from disk...</kbd > -> 选择下载的文件安装
54
65
55
- # 使用
66
+ # 3. 使用
56
67
57
68
** 因为需要拉取数据库表的元数据信息、执行SQL,所以使用前需要配置一下数据源。**
58
69
64
75
65
76
![ ] ( ./docs/datasource.jpg )
66
77
78
+ ## 3.1 模式
79
+
67
80
此插件有两种模式:mybatis模式和非mybatis模式。差别在于mybatis模式支持以下功能:
68
81
69
82
- mapper接口方法参数mock
75
88
- 基于mock参数将mapper接口方法的xml转换成真实SQL
76
89
- 按照文件/项目维度扫描XML文件,并生成对应的真实SQL语句,并进行规约/索引相关校验
77
90
78
- ## 非mybatis模式
91
+ ### 3.1.1 非mybatis模式
79
92
80
93
将` mybatis mode ` 的勾选框关闭即可使用` 非mybatis模式 ` ,然后在「statement」Tab左栏手写SQL即可。
81
94
82
95
![ ] ( ./docs/mybatis-mode.jpg )
83
96
84
- ## mybatis模式
97
+ ### 3.1.2 mybatis模式
85
98
86
99
将` mybatis mode ` 的勾选框选中即可使用` mybatis模式 ` ,` mybatis模式 ` 主要添加了mapper接口方法参数mock、文件跳转及mybatis文件扫描的功能。
87
100
88
101
在mapper接口或XML文件中点击「sql」图标,即可生成mapper方法参数随机值,如果对生成的随机不满意或不满足条件,可以手动修改进行自定义。然后点击「statement」Tab即可使用该参数将mybatis的xml实现转换成真实的SQL语句。
89
102
90
103
![ 随机参数] ( ./docs/param_random.jpg )
91
104
92
- ### mybatis sql扫描
105
+ ### 3.1.3 mybatis sql扫描
93
106
94
107
支持文件和项目两个维度扫描。
95
108
96
- 1 . 文件维度扫描
109
+ #### 3.1.3. 1. 文件维度扫描
97
110
98
111
点击` <mapper namespace="xxx.xxx.xxx"> ` 或者` namespace ` 对应的mapper接口旁边的「sql」图标即可完成文件维度mybatis sql的扫描
99
112
100
113
![ 文件维度扫描] ( ./docs/scan_file.jpg )
101
114
102
- 2 . 项目维度
115
+ #### 3.1.3.2 项目维度
103
116
104
117
点击「mybatis sql scan」即可进行项目维度mybatis sql的扫描
105
118
126
139
- error:存在错误的SQL语句,可能是SQL编写错误,参数错误,数据库连接错误等
127
140
128
141
129
- ## 「sql」Tab
142
+ ## 3.2 SQL语句
130
143
131
- ### 1. 「statement」Tab
144
+ ### 3.2. 1. 语法校验&规约检查
132
145
133
146
对于「非mybatis模式」需要左栏编写SQL语句,「mybatis」模式则需要在mapper接口或XML文件中点击「sql」图标生成SQL,右栏自动进行语法校验和规规约校验
134
147
135
- 1 . SQL语法校验
148
+ 1 . ** SQL语法校验**
136
149
137
150
![ statement效果之语法校验] ( ./docs/sql_statement_syntax.jpg )
138
151
139
- 2 . 规约校验
152
+ 2 . ** 规约校验**
140
153
141
154
![ statement效果之规约检查] ( ./docs/sql_statement_rule.jpg )
142
155
143
- ### 2. 「result」Tab
156
+ ### 3.2.2. SQL执行
144
157
145
158
点击「result」tab后会自动执行「statement」Tab中的SQL语句。执行结果由3部分组成:执行信息、执行计划及执行结果。
146
159
150
163
151
164
![ result效果] ( ./docs/result.jpg )
152
165
153
- ### 3. 「stress」Tab
166
+ ### 3.2.3. SQL压测
154
167
155
168
点击「stress」Tab进行压测配置,配置页面如下:
156
169
192
205
193
206
![ 压测报告] ( ./docs/stress_report.jpg )
194
207
195
- ## 「table」Tab
208
+ ## 3.3 SQL表
196
209
197
210
点击「table」Tab时会对「statement」Tab中的SQL语句进行解析,提取出表名称,然后每个表作为一个Tab。如以下语句:
198
211
@@ -216,21 +229,21 @@ SQL语句中包含了两个表:`CITY`和`COUNTRY`,所以会产生两个Tab
216
229
217
230
![ specify table tab] ( ./docs/specify_table.jpg )
218
231
219
- ### 1. 「schema」Tab
232
+ ### 3.3. 1. 字段
220
233
221
234
1 . 左栏显示表的字段信息:字段名称、类型、是否可为NULL、默认值、索引、注释说明等信息
222
235
2 . 右栏显示对表进行建表规约检查的结果:如表名、字段名是否包含大写字母或特殊字符等检查
223
236
224
237
![ schema tab] ( ./docs/schema_tab.jpg )
225
238
226
- ### 2. 「index」Tab
239
+ ### 3.3. 2. 索引
227
240
228
241
1 . 左栏显示表的索引信息
229
242
2 . 右栏显示对索引进行规约检查的结果
230
243
231
244
![ schema tab] ( ./docs/schema_index.jpg )
232
245
233
- ### 3. 「mock」Tab
246
+ ### 3.3.3. 数据mock
234
247
235
248
mock表数据,支持批量数据mock,左栏进行mock数据类型配置,右栏显示mock结果
236
249
@@ -259,7 +272,7 @@ mock表数据,支持批量数据mock,左栏进行mock数据类型配置,
259
272
- increment:递增
260
273
- fixed:固定值
261
274
- regex:正则
262
- - none:不进行mock,生成insert语句时包含此字段
275
+ - none:不进行mock,生成insert语句时不包含此字段
263
276
264
277
265
278
** 词库创建**
@@ -286,7 +299,7 @@ mock数据完成后,会存储主键id的范围(持久化存储到本地文
286
299
287
300
![ mock clean] ( ./docs/mock_clean.jpg )
288
301
289
- # 参考
302
+ # 4. 参考
290
303
291
304
在实现过程中参考了许多非常优秀的项目,拷贝了很多代码,特此感谢。
292
305
0 commit comments