前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IntelliJ IDEA专用编程提效插件,用好这些辅助编程插件,就让那些不会用工具的人慢慢加班码代码吧!

IntelliJ IDEA专用编程提效插件,用好这些辅助编程插件,就让那些不会用工具的人慢慢加班码代码吧!

作者头像
架构狂人
发布2024-04-01 11:20:08
2030
发布2024-04-01 11:20:08
举报
文章被收录于专栏:架构狂人架构狂人

大家好,欢迎来到顶尖架构师栈!

高级码农一定要学会利用工具,不管是插件还是AI,都要熟练掌握,借助它们快速完成工作,才有更多的实际学习探索其他领域。插件和AI相当于码农的飞机和坦克,有核武器不用非要使用小米加步枪,那肯定是硬刚不过的。今天给大家推荐几款常用的优质的插件,旨在快速帮大家完成这80%体力代码,将更多的时间投入在核心功能的开发,告别加班,告别996!

MyBatisCodeHelperPro

第一步 创建好表结构

第二步 使用MyBatisCodeHelperPro一键生成好mybatis 脚本 (可以省略,第三步也可以直接生成)

EasyCode

一个能帮我们快速将表映射成 Spring 项目中EntityControllerDerviceDaoMapper等文件,快速实现基础功能的插件

插件安装

插件中心搜索Easy Code 安装即可

插件使用

第一步,添加一个数据源,连接对应的数据库

第二步

在数据源中找到对应的表,右键选择Easy Code,即可快速生成

Lombok

Lombok 是一款针对 Java 语言的编译时插件,用于通过注解自动化生成重复的代码,减少一些常规的 Java 代码书写。

依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
</dependency>

插件

Lombok 不仅需要依赖,还需要安装对应的插件,在插件中心搜索Lombok,安装重启即可

使用

在使用 Lombok 之前,一个对象的get、set、tostring,构造方法等等,写起来还是非常麻烦的,一个简单的对象,就需要写下面这么多代码:

代码语言:javascript
复制
/**
 * @author 公众号:一行Java
 * @title: UserInfo
 * @projectName ehang-spring-boot
 * @description: TODO
 * @date 2023/9/15 9:15
 */
public class UserInfo {

    private String userName;
    
    private Integer age;

    public UserInfo() {
    }

    public UserInfo(String userName, Integer age) {
        this.userName = userName;
        this.age = age;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        UserInfo userInfo = (UserInfo) o;

        return new EqualsBuilder()
                .append(userName, userInfo.userName)
                .append(age, userInfo.age)
                .isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37)
                .append(userName)
                .append(age)
                .toHashCode();
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                '}';
    }
}

但一旦引入 Lombok ,这个事情就变的非常简单,三个注解就能实现上面的所有方法,代码也变得非常简洁,清爽;

代码语言:javascript
复制
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author 公众号:一行Java
 * @title: UserInfo
 * @projectName ehang-spring-boot
 * @description: TODO
 * @date 2023/9/15 9:15
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {

    private String userName;

    private Integer age;

}

Lombok 支持的注解及说明

  1. @Getter / @Setter: 自动生成字段的 getter 和 setter 方法。
  2. @ToString: 自动生成 toString 方法。默认情况下,生成包含所有字段的 toString 方法。
  3. @EqualsAndHashcode: 自动生成 equals 和 hashCode 方法。默认情况下,生成包含所有非静态、非transient 字段的 equals 和 hashCode 方法。
  4. @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor: 自动生成无参构造方法、必须参数构造方法、全参构造方法。
  5. @Data: 自动生成 getter、setter、equals、hashCode、toString 方法。
  6. @Builder: 自动生成建造者模式的代码,用于创建复杂对象。
  7. @Log: 自动生成日志记录变量,支持不同的日志框架,例如 @Slf4j 用于集成 SLF4J。
  8. @NoArgsConstructor(force = true) / @AllArgsConstructor(force = true): 自动生成无参构造方法、全参构造方法,并将字段设置为 final。
  9. @Cleanup: 自动管理资源,主要用于清除需要手动释放的资源,例如 IO 流。
  10. @SneakyThrows: 在方法体中自动捕捉并重新抛出异常,无需显式地进行异常处理。
  11. @NonNull: 生成非空检查代码。
  12. @Accessors: 提供链式调用风格的 setter 和 getter 方法。
  13. @Value: 创建不可变类,字段为 final,并自动生成 getter 方法。
  14. @Wither: 自动生成属性的不可变更新方法。
  15. @EqualsAndHashCode(callSuper = true): 生成包含父类字段的 equals 和 hashCode 方法。

MapStruct

MapStruct 是一个 Java 编译时注解处理框架,用来自动化将一种 Java Bean 对象映射成另一种类型的对象。

该框架的主要目标是使开发人员在尽可能少的代码和最低的运行时间成本下实现属性映射。MapStruct 通过在编译时生成代码来实现这点,这与大多数其他 Java Bean 映射框架在运行时通过反射进行映射形成了鲜明对比。

MapStruct 具有以下主要特性:

  • 简洁:简化了 Java Beans 之间转换的代码,自动生成使用简单的赋值语句完成的映射实现。
  • 性能优秀:由于 MapStruct 是在编译时生成代码,不涉及任何反射,因此执行映射的性能优越。
  • 安全:通过在编译时生成映射代码,MapStruct 提供了类型安全的映射,并能在编译时就发现潜在的错误。
  • 灵活:可通过自定义转换方法、类型转换和映射策略等来满足复杂的映射需求。
  • 良好的 IDE 支持:由于 MapStruct 是编译时工具,所以拥有良好的 IDE 集成,如代码自动完成、错误高亮等。

总的来说, MapStruct 是一个强大且灵活的映射框架,很好的解决有关对象转换的问题,实现了代码的简洁和性能的兼顾。

MapStruct的常规用法,网上有很多教程了,本文将列举一些进阶用法,方便日常开发使用。

expression

在转化的时候,执行 java 表达式,直接看例子:

代码语言:javascript
复制
@Mapper(componentModel = "spring")
public interface MyMapper {
    @Mapping(target = "createTime", expression = "java(System.currentTimeMillis())")
    Target toTarget(Source source);
}

转化成 target 对象时,createTime字段的值,会设置为System.currentTimeMillis(),生成的代码如下:

代码语言:javascript
复制
@Component
public class MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        Target target = new Target();
        target.setCreateTime( System.currentTimeMillis() );
        return target;
    }
}

qualifiedByName

做映射时,默认情况下,从source 字段到target 字段是直接使用 get/set,如下:

代码语言:javascript
复制
@Data
public class Source {
    private String name;
}

@Data
public class Target {
    private String name;
}
    

@Mapper(componentModel = "spring")
public interface MyMapper {
    Target toTarget(Source source);
}

生成的转化代码类如下:

代码语言:javascript
复制
@Component
public class MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        if ( source == null ) {
            return null;
        }

        Target target = new Target();

        // 无脑 set/get
        target.setName( source.getName() );

        return target;
    }
}

如果这种直接的 set/get 无法满足需求,比如需要把 name 转化成大写格式,那么可以使用qualifiedByName:

代码语言:javascript
复制
@Mapper(componentModel = "spring")
public interface MyMapper {
    @Mapping(target = "name", source = "name", qualifiedByName = "toUpperCase")
    Target toTarget(Source source);

    @Named("toUpperCase")
    default String toUpperCase(String value) {
        // 这里写转换大写的逻辑
        return value == null ? null : value.toUpperCase();
    }
}

生成的代码如下:

代码语言:javascript
复制
@Component
public class MyMapperImpl implements MyMapper {

    @Override
    public Target toTarget(Source source) {
        if ( source == null ) {
            return null;
        }

        Target target = new Target();

        target.setName( toUpperCase( source.getName() ) );

        return target;
    }
}

GenerateAllSetter

一款一键调用set、get方法的插件;当开发中遇到一个大对象需要初始化,或者要获取一个大对象中的属性时,就单纯是调用他的get、set方法,就能让人写的人手软,这款插件就能完美的帮我们解决这个体力活。

插件安装

插件使用

  • 一键调用set,get方法 首先,鼠标的光标放在对象所处的行 然后使用快捷键Alt + Enter,选择是生成get还是set,几个生成,set的生成有两种方式,一种是不赋值,一种是赋予属性的默认值,可以根据自己的实际情况来定:
  • 一键转换对象 当我们需要做对象转换时,比如,模型对象转换成 DTO 对象,也可以借助这个插件一键生成

总结

程序员一定要善于利用工具,借助工具快速完成开发 任务,就像官网已经推出了AI助手,很多人还没用过,其实有了AI助手很多代码都能通过提示自动生成,很多大佬也预言未来不需要程序员,编程的门槛已经变得越来越低,掌握AI工具的程序员对那些手写的肯定是降维打击,程序员一定要拥抱变化,唯一不变的就是变化,希望看到文章的朋友都能有所启发!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 顶尖架构师栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MyBatisCodeHelperPro
    • 第一步 创建好表结构
      • 第二步 使用MyBatisCodeHelperPro一键生成好mybatis 脚本 (可以省略,第三步也可以直接生成)
      • EasyCode
        • 插件安装
          • 插件使用
          • Lombok
            • 依赖
              • 插件
                • 使用
                  • Lombok 支持的注解及说明
                  • MapStruct
                    • expression
                      • qualifiedByName
                      • GenerateAllSetter
                        • 插件安装
                          • 插件使用
                          • 总结
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档