JetBrains Idea 的 SQLFormatter 格式化插件,比内置更好用(完爆),想你所见 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
petercaogx
V2EX    程序员

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

  •  1
     
  •   petercaogx 2024-02-08 14:33:34 +08:00 4403 次点击
    这是一个创建于 666 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两年网上铺天盖地都是互联网大厂裁员的消息,终于我也加入了被裁行列。静下来想想,在原公司也很多年了,换个工作看看新环境也不是坏事,一个地方待太久容易 变成坐井观天。新入职的一家公司是做企业管理软件的公司, 这和我之前做互联网电商的公司还真是很有点不一样。刚刚开始工作,很明显的感觉到就是程序使用的 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  
       2024-02-08 14:42:47 +08:00
    你的图好像挂了
    dominic007
        2
    dominic007  
       2024-02-08 14:44:02 +08:00
    无图无真相[狗头]
    petercaogx
        3
    petercaogx  
    OP
       2024-02-08 14:49:15 +08:00
    @yanggggjie 有图像啊,你看不到吗?
    petercaogx
        4
    petercaogx  
    OP
       2024-02-08 14:51:11 +08:00
    @yanggggjie 我这里看着正常啊,咋回事
    yanggggjie
        5
    yanggggjie  
       2024-02-08 15:09:33 +08:00
    @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
       2024-02-08 15:15:13 +08:00
    @yanggggjie 我 ssl 证书确实过期了,但我链接是 http 的
    petercaogx
        7
    petercaogx  
    OP
       2024-02-08 15:17:02 +08:00
    @yanggggjie Mixed Content: The page at '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  
       2024-02-08 15:21:41 +08:00
    在 HTTPS 的网站贴 HTTP 连接,这还用 DEBUG 吗老哥,你之前是搞哪方面开发的啊
    petercaogx
        9
    petercaogx  
    OP
       2024-02-08 16:20:07 +08:00
    @Vegetable 我证书过期了,现在阿里云没有免费的证书了,我在搞哪,谢谢啊
    petercaogx
        10
    petercaogx  
    OP
       2024-02-08 16:21:32 +08:00
    @Vegetable 你知道在哪里能申请到免费的证书吗?
    Vegetable
        11
    Vegetable  
       2024-02-08 16:24:34 +08:00
    Cheivin
        12
    Cheivin  
       2024-02-08 16:24:35 +08:00
    @petercaogx #10 let's encrypt
    danielfoo
        13
    danielfoo  
       2024-02-08 21:38:47 +08:00 via Android
    说的神乎其神,我下载个试试
    petercaogx
        14
    petercaogx  
    OP
       2024-02-08 22:02:35 +08:00
    @danielfoo 用着好就回来说一声,不好就别吱声了,哈哈哈
    haimianbihdata
        15
    haimianbihdata  
       2024-02-10 21:14:10 +08:00
    我安装了使用了,但是在 格式化的时候,会把 -- 开头的注释删除掉,而且# 的注释 格式化也不是很友好。不知道是不是因为我的配置问题导致的。
    petercaogx
        16
    petercaogx  
    OP
       2024-02-11 09:25:46 +08:00
    @haimianbihdata 你把 SQL 贴出来看看哪
    haimianbihdata
        18
    haimianbihdata  
       2024-02-11 16:23:51 +08:00 via Android
    @petercaogx 可以看看最新的 issue 。作者已经更新了版本。
    petercaogx
        19
    petercaogx  
    OP
       2024-02-11 17:25:41 +08:00
    @haimianbihdata 好的,回头看看
    danielfoo
        20
    danielfoo  
       2024-02-13 11:58:48 +08:00 via Android
    @petercaogx 忙着拜年,还没顾上试
    petercaogx
        21
    petercaogx  
    OP
       2024-02-14 11:14:03 +08:00 via iPhone
    @haimianbihdata 新版本你试了吗?好了吗?
    haimianbihdata
        22
    haimianbihdata  
       2024-02-14 14:40:14 +08:00 via Android
    idea 还在审核吧。我看插件还没上更新。作者修复了我的问题。感谢
    petercaogx
        23
    petercaogx  
    OP
       2024-02-16 17:38:35 +08:00
    @Vegetable ssl 证书搞好了,但这个文章改不了了,我新发了一篇英文的,
    t/1015824
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     862 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 21:54 PVG 05:54 LAX 13:54 JFK 16:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86