JetBrains Idea 的 SQLFormatter 格式化插件,比内置更好用(完爆),想你所见

321 天前
 petercaogx

这两年网上铺天盖地都是互联网大厂裁员的消息,终于我也加入了被裁行列。静下来想想,在原公司也很多年了,换个工作看看新环境也不是坏事,一个地方待太久容易 变成坐井观天。新入职的一家公司是做企业管理软件的公司, 这和我之前做互联网电商的公司还真是很有点不一样。刚刚开始工作,很明显的感觉到就是程序使用的 sql 变得复杂了很多。管理软件的 sql 真的是大篇幅,200 行起步的样子,长的能到 2000 行,看着头皮发麻。电商程序的 sql 就简单很多了,单表的不用自己写 sql ,稍微复 杂点的也是百行之内能搞定。不过这点问题怎么能难倒久经沙场的我,只要 sql 格式写的漂亮,慢慢看还是能将就看下去。迅速 idea 内置格式化走起,按 ctrl+alt+L:

结果令我意外,本来还可以看的 sql ,被我一格式化成这样了,简直看不下去了,大片的空行,莫名其妙的代码块偏移(缩进),每行有效语句量太少,行数暴增,这肯 定不行呢! Idea 格式化成这个样子,只能拿到数据库管理软件中去格式化了,我一般支持正版,平时用 DBeaver 开源免费的软件,那就走起。

这个一眼看上去就舒服多了,case 这部分能看出一块一块的结构了,这样的话逻辑要清晰很多。可是,,当我向下翻了一些,看到了这样的内容:

在这一块的格式化中,有大量的 and 、or 运算,函数和括号对,语句的风格立马就变的有点像 idea 中的一样了,行太短,没有完整分块的语义,很难理解这些语句在干 什么了,即使使劲看清楚了一两行,等你去看下一节的时候,上一节又找不到在什么地方开始、什么地方结束了。特别是,你正看的聚精会神,傍边座位的混子推一下你 说:“你看抖音上这个视频真的很好笑哟,逗逼的很!”,这样,等你应付完回来,,又得重新开始分析这个 Sql 。只想说一句:“我是谁,我在哪?”。

平时用的这两招解决不了大篇幅 Sql 的问题,那就还得第三招,程咬金还有三板斧呢,我不能就两招就投隆了吧,idea 有插件,去找插件去,如果在 idea 里面能找到符 合品味的插件那不是比在数据库管理软件中要方便很多么!说干就干,插件搜索“sql format”看看哪个插件用的人多,评分高,就先搞下来试试!
当我输入到 sqlf 的时候,市场里面就只剩三个条目了,这出呼我的意料,我本以为有很多类似的插件,但实际情况是只有三个,并且有两个还是一样的名字,一个免费 一个收费。算了,我就先试一试“SQLFormatter”这个吧,看上去名字很匹配。如图第一个,是我写这个文档的时候已经安装过了的样子,插件已经更新了,看来这个 插件还在很活跃更新中,这是好事啊! 先看看格式化出来的样子:

和前面两个工具格式化出来的比较,最前面的部分分块清晰,下在面的部分明显紧凑了,大量的 and 、or 运算被安排在一行里面,这样一次能看完一个逻辑结果,不会出 现频繁的换行。太频繁的换行,感觉就像听人说话一句话没说完,就换成了下一句。这个基本上是符合我了的风格。语句类似、重复的部分该成块的要成块,简单又很多 的运算成行,一次能看完一个逻辑,行数不会太多,已经基本可用了,程序员的要求可是很高哟! 顺便提一下,安装好插件后如图这样使用,在需要格式化处右键,选最下面一个“format sql”。 接下来,我再从项目里面找几个 sql 来试试这插件吧,如果大部分都能和我想到一块去,那以后就是这个插件了,不用再打新的主义了。以下图截图左边是 idea 内置的格 式化,右边是 SQLFormatter 的格式化,我还是对比放出来看一下,虽然内置的格式化已经被我否认掉了,奈何内置的有更多用户,与内置比较最有说服力 ,还是比较 比较吧!
这次内置格式化 出来的效果与 SQLFormatter 插件效果相差不大,有两点区别:1 ,内置格式化缩进大些,SQLFormatter 插件缩进小些。2 ,内置插件试图作 as 字段名的全局对齐, 但是实际上因为行宽的限制后来又放弃了对齐,SQLFormatter 插件把 as 字段名换行处理,行宽足够的留在了同一行上。其实可以看到,我特意把内置格式化那边的窗 口拉大了一些,因为不拉大字段名显示不出来,截图的时候您看不见,使用的时候我也看不见,有点鸡肋,需要左右滑动窗口。
这次格式化缩进差异就更明显了,缩进给人的感觉已经不是“缩进”了,反面而有点混乱。
这个图您一眼看上去不像是同一个 sql 的格式化吧,,我认真的告诉您,其实这是同一个 sql 的格式化,注意左边窗口的底部横向滚动条,你就能明白了。内置的格式化 没有对第一行中的 select 字段名换行,而这个查询的字段有超多,所以内置格式化的第一行很长,SQLFormatter 对查询字段进行了换行对齐,很棒。横向滚动一下看 看下图,第一行的后面还有很长呢! 再贴一次格式化对比图 这个我就不再一一解释对比了,其实和上面的差不多,都在缩进,换行上面的异常。 格式化这件事,应该比较的就是缩进与换行的功夫了吧!

写到最后,还是官宣一下,SQLFormatter 这个格式化的工具我还是比较满意了,以后就选它了。其它吧,这个工具还有优化点,截图是也有一处,我去给作者反馈去,慢慢演进吧! 新找的工作不容易,我还是少做一些与老板无关的工作,赶紧存个草稿,起身看看谁需要帮忙吧,我去跑个龙套。

3678 次点击
所在节点    程序员
23 条回复
yanggggjie
321 天前
你的图好像挂了
dominic007
321 天前
无图无真相[狗头]
petercaogx
321 天前
@yanggggjie 有图像啊,你看不到吗?
petercaogx
321 天前
@yanggggjie 我这里看着正常啊,咋回事
yanggggjie
321 天前
@petercaogx #4
@petercaogx #4

一个 img 元素出错了
GET https://www.spdycoding.com:8080/files/BJ0001.png net::ERR_SSL_PROTOCOL_ERROR
ChatGPT
这个错误表明在尝试加载图像时发生了 SSL 协议错误。可能有几个原因导致这个问题:

证书问题: 服务器上的 SSL 证书可能无效或过期。确保服务器上的 SSL 证书是有效的,未过期,并由信任的证书颁发机构签发。

端口问题: 错误中显示端口号为 8080 ,确保你的服务器确实在这个端口上提供了 SSL 服务。通常,SSL 使用的是 443 端口。检查你的服务器配置,确保 SSL 监听的是正确的端口。

协议版本问题: 有时,浏览器和服务器之间的 SSL 协议版本不匹配可能导致问题。确保你的服务器支持浏览器使用的 SSL/TLS 协议版本。最新的协议版本通常是更安全的选择。

防火墙或代理问题: 防火墙或代理可能会干扰 SSL 连接。确保没有防火墙或代理阻止了 SSL 连接。此外,检查是否有网络层面的问题,如是否能够正常访问其他 HTTPS 网站。

在解决问题之前,最好确保你有权访问服务器并查看服务器的 SSL 证书和配置。如果你不是服务器的管理员,需要联系服务器管理员以获取支持。


chatgpt 这么说的
petercaogx
321 天前
@yanggggjie 我 ssl 证书确实过期了,但我链接是 http 的
petercaogx
321 天前
@yanggggjie Mixed Content: The page at 'https://www.v2ex.com/t/1015039' was loaded over HTTPS, but requested an insecure element 'http://www.spdycoding.com:8080/files/BJ0006.png'. This request was automatically upgraded to HTTPS, For more information see https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html
Vegetable
321 天前
在 HTTPS 的网站贴 HTTP 连接,这还用 DEBUG 吗老哥,你之前是搞哪方面开发的啊
petercaogx
321 天前
@Vegetable 我证书过期了,现在阿里云没有免费的证书了,我在搞哪,谢谢啊
petercaogx
321 天前
@Vegetable 你知道在哪里能申请到免费的证书吗?
Vegetable
321 天前
Cheivin
321 天前
@petercaogx #10 let's encrypt
danielfoo
321 天前
说的神乎其神,我下载个试试
petercaogx
321 天前
@danielfoo 用着好就回来说一声,不好就别吱声了,哈哈哈
haimianbihdata
319 天前
我安装了使用了,但是在 格式化的时候,会把 -- 开头的注释删除掉,而且# 的注释 格式化也不是很友好。不知道是不是因为我的配置问题导致的。
petercaogx
319 天前
@haimianbihdata 你把 SQL 贴出来看看哪
haimianbihdata
319 天前
haimianbihdata
318 天前
@petercaogx 可以看看最新的 issue 。作者已经更新了版本。
petercaogx
318 天前
@haimianbihdata 好的,回头看看
danielfoo
317 天前
@petercaogx 忙着拜年,还没顾上试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1015039

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX