V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
petercaogx
V2EX  ›  程序员

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

  •  1
     
  •   petercaogx · 288 天前 · 3615 次点击
    这是一个创建于 288 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两年网上铺天盖地都是互联网大厂裁员的消息,终于我也加入了被裁行列。静下来想想,在原公司也很多年了,换个工作看看新环境也不是坏事,一个地方待太久容易 变成坐井观天。新入职的一家公司是做企业管理软件的公司, 这和我之前做互联网电商的公司还真是很有点不一样。刚刚开始工作,很明显的感觉到就是程序使用的 sql 变得复杂了很多。管理软件的 sql 真的是大篇幅,200 行起步的样子,长的能到 2000 行,看着头皮发麻。电商程序的 sql 就简单很多了,单表的不用自己写 sql ,稍微复 杂点的也是百行之内能搞定。不过这点问题怎么能难倒久经沙场的我,只要 sql 格式写的漂亮,慢慢看还是能将就看下去。迅速 idea 内置格式化走起,按 ctrl+alt+L:
    idea 默认格式化
    结果令我意外,本来还可以看的 sql ,被我一格式化成这样了,简直看不下去了,大片的空行,莫名其妙的代码块偏移(缩进),每行有效语句量太少,行数暴增,这肯 定不行呢! Idea 格式化成这个样子,只能拿到数据库管理软件中去格式化了,我一般支持正版,平时用 DBeaver 开源免费的软件,那就走起。
    DBeaver 格式化优秀处
    这个一眼看上去就舒服多了,case 这部分能看出一块一块的结构了,这样的话逻辑要清晰很多。可是,,当我向下翻了一些,看到了这样的内容:
    DBeaver 格式化不足处
    在这一块的格式化中,有大量的 and 、or 运算,函数和括号对,语句的风格立马就变的有点像 idea 中的一样了,行太短,没有完整分块的语义,很难理解这些语句在干 什么了,即使使劲看清楚了一两行,等你去看下一节的时候,上一节又找不到在什么地方开始、什么地方结束了。特别是,你正看的聚精会神,傍边座位的混子推一下你 说:“你看抖音上这个视频真的很好笑哟,逗逼的很!”,这样,等你应付完回来,,又得重新开始分析这个 Sql 。只想说一句:“我是谁,我在哪?”。

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

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

    23 条回复    2024-02-16 17:38:35 +08:00
    yanggggjie
        1
    yanggggjie  
       288 天前
    你的图好像挂了
    dominic007
        2
    dominic007  
       288 天前
    无图无真相[狗头]
    petercaogx
        3
    petercaogx  
    OP
       288 天前
    @yanggggjie 有图像啊,你看不到吗?
    petercaogx
        4
    petercaogx  
    OP
       288 天前
    @yanggggjie 我这里看着正常啊,咋回事
    yanggggjie
        5
    yanggggjie  
       288 天前
    @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
        6
    petercaogx  
    OP
       288 天前
    @yanggggjie 我 ssl 证书确实过期了,但我链接是 http 的
    petercaogx
        7
    petercaogx  
    OP
       288 天前
    @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
        8
    Vegetable  
       288 天前
    在 HTTPS 的网站贴 HTTP 连接,这还用 DEBUG 吗老哥,你之前是搞哪方面开发的啊
    petercaogx
        9
    petercaogx  
    OP
       288 天前
    @Vegetable 我证书过期了,现在阿里云没有免费的证书了,我在搞哪,谢谢啊
    petercaogx
        10
    petercaogx  
    OP
       288 天前
    @Vegetable 你知道在哪里能申请到免费的证书吗?
    Cheivin
        12
    Cheivin  
       288 天前
    @petercaogx #10 let's encrypt
    danielfoo
        13
    danielfoo  
       287 天前 via Android
    说的神乎其神,我下载个试试
    petercaogx
        14
    petercaogx  
    OP
       287 天前
    @danielfoo 用着好就回来说一声,不好就别吱声了,哈哈哈
    haimianbihdata
        15
    haimianbihdata  
       285 天前
    我安装了使用了,但是在 格式化的时候,会把 -- 开头的注释删除掉,而且# 的注释 格式化也不是很友好。不知道是不是因为我的配置问题导致的。
    petercaogx
        16
    petercaogx  
    OP
       285 天前
    @haimianbihdata 你把 SQL 贴出来看看哪
    haimianbihdata
        18
    haimianbihdata  
       285 天前 via Android
    @petercaogx 可以看看最新的 issue 。作者已经更新了版本。
    petercaogx
        19
    petercaogx  
    OP
       284 天前
    @haimianbihdata 好的,回头看看
    danielfoo
        20
    danielfoo  
       283 天前 via Android
    @petercaogx 忙着拜年,还没顾上试
    petercaogx
        21
    petercaogx  
    OP
       282 天前 via iPhone
    @haimianbihdata 新版本你试了吗?好了吗?
    haimianbihdata
        22
    haimianbihdata  
       282 天前 via Android
    idea 还在审核吧。我看插件还没上更新。作者修复了我的问题。感谢
    petercaogx
        23
    petercaogx  
    OP
       279 天前
    @Vegetable ssl 证书搞好了,但这个文章改不了了,我新发了一篇英文的,
    https://www.v2ex.com/t/1015824
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5243 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:50 · PVG 16:50 · LAX 00:50 · JFK 03:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.