写点什么

我把 Idea 给改了,看看有没有你常用的功能,没有,你告诉我,我给你造了

作者:非喵鱼
  • 2022-12-08
    重庆
  • 本文字数:3543 字

    阅读完需:约 12 分钟

我把Idea给改了,看看有没有你常用的功能,没有,你告诉我,我给你造了

改造的目标

时隔 2 个多月的研发,11 月 25 日,终于把 Idea 插件 BG-BOOM 的 1.1.0 版本搞上线了,本次更新勇哥也是百忙之中挤时间,加班加点的开发,目的也主要是帮助大家提升开发效率,有更多摸鱼和内卷时间;好了,切回正题,本次带来更新的功能有点 diao,希望大家喜欢并点赞:


  • 提高创建 SpringBoot 项目的效率

  • 一键创建启动类、配置文件

  • 自动导入 springboot、springcloud、springcloudalibaba 等起步依赖

  • 提高启动、找启动类、找配置文件的效率

  • 一键启、停全部微服务

  • 一键定位配置文件

  • 提高大家对数据库表直观理解

  • 提供了 ER 图,自动匹配逻辑主键

  • 提高 JPA 开发的效率

  • 一键拷贝 JPA 的 controller、service、pojo、dao 等代码

  • 提高 Mariadb 的使用

  • 直接在代码中,不用配置连接,一键打开 Mariadb 查询客户端

快速创建 SpringBoot 项目功能介绍

Idea 自带创建工程功能的问题

一般在工作中,大多程序时通过 Maven Archetype 来创建新项目和模块,这种基于骨架方式来创建项目有一些弊端:

  • 骨架的资源需要通过网络下载,如果网络抖动下载丢失资源了,整个项目就崩溃了

  • 骨架的资源需要通过网络下载,如果网速慢,则创建过程可能需要 1~2 分钟

  • 骨架中默认包括的文件与实践开发的项目不符合,往往创建完成项目后,需要程序员手动删除

你是不是也是这样创建项目的呢?



Bg-Boom 是如何快速创建项目的

勇哥在插件中特制了一个项目创建的引导功能:

  • 创建时输入启动类的名称、勾选默认导入的 springboot-starter,项目创建的时候就会自动创建启动类,导入勾选的 starter;这样创建的项目:

  • 自动创建启动类;

  • 自动在 pom.xml 中导入 spring-boot 的那些依赖;

  • 自动创建 application.yml 配置文件,并设置基础属性

  • 创建的工程也是 maven 项目,但是项目不是基于骨架创建,因此不走网络下载资源,因此创建效率自然高效,稳定。

秀一波:



快速启停 SpringBoot 项目功能介绍

Idea 自带项目启动的问题

idea 的项目启动如果是单体项目,是没什么问题的,但是如果是微服务或者模块较多的情况下,就会存在以下问题:

  • 第一次启动,需要一层一层的点击到启动类,让右键启动;如果启动的项目多、项目层级多,那么这是非常繁琐的

  • 第 N 次启动,可以从快速启动下拉中、Services 中启动,但是下拉选择和 Services 都是多层次设计,启动项目都要点击 2 次以上,对一项目多了,还是麻烦



Bg-Boom 是如何一键启动所有项目的

勇哥在插件中特制了一个快速启动栏:

  • 自动扫描当前项目中的微服务(仅支持 SpringBoot 工程)

  • 扫描到的微服务,自动显示到快速启动栏中

  • 从快速启动栏中,你可以一键完成:

  • 启动某个项目

  • 停止某个项目

  • 启动所有项目

  • 停止所有项目

  • 点击在浏览器中打开项目

  • 定位启动类

  • 如果快速启动栏中项目太多,也不需要担心,可以左右拖动,:)NICE



在 Bg-Boom 中通过 ER 图熟悉数据库

现在在工作中,基本上表与表之间都不会使用外键约束,而是使用逻辑外键,这样的话,在 Navicat 这些常规数据库中 ER 模型中是不会画出表与表之间的关系,阻碍了大家对于表关系的快速掌握。因此勇哥自行开发了一套基于逻辑外键的 ER 图模型:

  • 自动识别表中的逻辑外键(一般是以_id 结尾的字段)

  • 可以动态显示/关闭逻辑外键关联线

  • 可以 ER 图保存为图片

  • 可以自有拖动位置、拖动调整大小



勇哥为此还写了横、竖两个刻度尺,帅不帅,刻度尺源码如下:给勇哥点个赞吧~~~,勇哥也需要你们的精神粮食


package com.madou.dbtool.uml.cantainer;
import javax.swing.*;import java.awt.*;
/** * 刻度尺面板类 */public class RuleContainer extends JPanel implements ScaleFunction {
// 背景颜色 Color backgroudColor = Color.BLACK; // 刻度颜色 Color fontColor = Color.WHITE; // 是否垂直 boolean isVertical = false; // 左边距 int left = 0; // 缩放比例,每走一格+-5 int scale = 100;
public RuleContainer() { this(false,0); }
public RuleContainer(int left) { this(false,left); }
public RuleContainer(boolean isVertical, int left){ this.setLayout(null); this.setBackground(Color.RED); this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); this.left = left; this.isVertical = isVertical; if(this.isVertical){ this.setPreferredSize(new Dimension(20, -1)); }else { this.setPreferredSize(new Dimension(-1, 20)); } }
public void drawX(Graphics graphics){ int width = this.getWidth(); int height = this.getHeight(); int index = 0; int count = 0; double postion = left; int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution(); int step = (int) Math.round((screenResolution/25.4)/(scale/100F)); Font font = Font.getFont("微软雅黑"); graphics.setColor(fontColor); graphics.setFont(font); if(isVertical){ if(scale<101) { height = (int) (height/(scale/100F)); } while (postion<height){ if(count%10==0){ graphics.drawLine(width/2,(int) postion,width,(int) postion); graphics.drawString(""+index++, 0,(int) postion-1); }else{ if(count>0&&count%5==0){ graphics.drawLine(width * 3 / 5, (int) postion, width, (int) postion); }else { graphics.drawLine(width * 4 / 5, (int) postion, width, (int) postion); } } postion+=step; count++; } }else{ if(scale<101) { width = (int) (width / (scale / 100F)); } while (postion<width){ if(count%10==0){ graphics.drawLine((int) postion,height/2,(int) postion,height); graphics.drawString(""+index++, (int) postion-3,height/2); }else{ if(count>0&&count%5==0){ graphics.drawLine((int) postion,height*3/5,(int) postion,height); }else { graphics.drawLine((int) postion,height*4/5,(int) postion,height); } } postion+=step; count++; } }
}
@Override protected void paintComponent(Graphics graphics) { graphics.setColor(backgroudColor); graphics.fillRect(0,0,getWidth(),getHeight()); drawX(graphics); }
public static void main(String[] args) { JFrame jFrame = new JFrame("1111"); jFrame.setLayout(new BorderLayout()); jFrame.setPreferredSize(new Dimension(600,600)); RuleContainer scalePanel = new RuleContainer(false,30); jFrame.add(scalePanel,BorderLayout.NORTH); scalePanel = new RuleContainer(true,0); jFrame.add(scalePanel,BorderLayout.WEST); jFrame.setVisible(true); jFrame.pack(); }
@Override public void scale(int step) { scale+=step; if(scale<20){ scale=20; } if(scale>500){ scale=500; } applyZoom(); }
private void applyZoom() { setPreferredSize(new Dimension((int) (scale/100F * getWidth()), (int) (scale/100F * getHeight()))); validate(); repaint(); }
@Override public void reset() { scale=100; scale(0); }}
复制代码

在 Bg-Ber 中一键拷贝 JPA 代码

勇哥在插件增加了数据库客户端,在数据库客户端中新增了 SQL 逆向生成 JPA 代码的功能:

  • 生成 Controller

  • 生成 Service

  • 生成 ServiceImpl

  • 生成 Dao

  • 生成 Pojo

代码自动生成演示:



在 Bg-Boom 中使用 Mariadb 客户端

Mariadb 客户端依旧继承 Mysql 客户端的牛逼设计:

  • 自动识别代码中的 POJO 类,并增加打开查询客户端的功能菜单和按钮

  • 在查询客户端中自动生成 JPA、Mybatis-plus 相关代码

  • .........等等,此处省略 N 个功能描述



发布于: 刚刚阅读数: 3
用户头像

非喵鱼

关注

技术专业一点,才能多一点时间陪家人! 2018-11-28 加入

Java生态开发高效工具 Tinkle、Boom的作者,欢迎大家持续关注!

评论

发布
暂无评论
我把Idea给改了,看看有没有你常用的功能,没有,你告诉我,我给你造了_Java_非喵鱼_InfoQ写作社区