大家好,欢迎来到顶尖架构师栈!
高级码农一定要学会利用工具,不管是插件还是AI,都要熟练掌握,借助它们快速完成工作,才有更多的实际学习探索其他领域。插件和AI相当于码农的飞机和坦克,有核武器不用非要使用小米加步枪,那肯定是硬刚不过的。今天给大家推荐几款常用的优质的插件,旨在快速帮大家完成这80%体力代码,将更多的时间投入在核心功能的开发,告别加班,告别996!
一个能帮我们快速将表映射成 Spring 项目中Entity
、Controller
、Dervice
、Dao
、Mapper
等文件,快速实现基础功能的插件
插件中心搜索Easy Code
安装即可
第一步,添加一个数据源,连接对应的数据库
第二步
在数据源中找到对应的表,右键选择Easy Code
,即可快速生成
Lombok 是一款针对 Java 语言的编译时插件,用于通过注解自动化生成重复的代码,减少一些常规的 Java 代码书写。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
Lombok 不仅需要依赖,还需要安装对应的插件,在插件中心搜索Lombok,安装重启即可
在使用 Lombok 之前,一个对象的get、set、tostring,构造方法等等,写起来还是非常麻烦的,一个简单的对象,就需要写下面这么多代码:
/**
* @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 ,这个事情就变的非常简单,三个注解就能实现上面的所有方法,代码也变得非常简洁,清爽;
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;
}
@Getter
/ @Setter
: 自动生成字段的 getter 和 setter 方法。@ToString
: 自动生成 toString 方法。默认情况下,生成包含所有字段的 toString 方法。@EqualsAndHashcode
: 自动生成 equals 和 hashCode 方法。默认情况下,生成包含所有非静态、非transient 字段的 equals 和 hashCode 方法。@NoArgsConstructor
/ @RequiredArgsConstructor
/ @AllArgsConstructor
: 自动生成无参构造方法、必须参数构造方法、全参构造方法。@Data
: 自动生成 getter、setter、equals、hashCode、toString 方法。@Builder
: 自动生成建造者模式的代码,用于创建复杂对象。@Log
: 自动生成日志记录变量,支持不同的日志框架,例如 @Slf4j
用于集成 SLF4J。@NoArgsConstructor(force = true)
/ @AllArgsConstructor(force = true)
: 自动生成无参构造方法、全参构造方法,并将字段设置为 final。@Cleanup
: 自动管理资源,主要用于清除需要手动释放的资源,例如 IO 流。@SneakyThrows
: 在方法体中自动捕捉并重新抛出异常,无需显式地进行异常处理。@NonNull
: 生成非空检查代码。@Accessors
: 提供链式调用风格的 setter 和 getter 方法。@Value
: 创建不可变类,字段为 final,并自动生成 getter 方法。@Wither
: 自动生成属性的不可变更新方法。@EqualsAndHashCode(callSuper = true)
: 生成包含父类字段的 equals 和 hashCode 方法。MapStruct
是一个 Java 编译时注解处理框架,用来自动化将一种 Java Bean
对象映射成另一种类型的对象。
该框架的主要目标是使开发人员在尽可能少的代码和最低的运行时间成本下实现属性映射。MapStruct
通过在编译时生成代码来实现这点,这与大多数其他 Java Bean
映射框架在运行时通过反射进行映射形成了鲜明对比。
MapStruct 具有以下主要特性:
总的来说, MapStruct 是一个强大且灵活的映射框架,很好的解决有关对象转换的问题,实现了代码的简洁和性能的兼顾。
MapStruct的常规用法,网上有很多教程了,本文将列举一些进阶用法,方便日常开发使用。
在转化的时候,执行 java 表达式,直接看例子:
@Mapper(componentModel = "spring")
public interface MyMapper {
@Mapping(target = "createTime", expression = "java(System.currentTimeMillis())")
Target toTarget(Source source);
}
转化成 target
对象时,createTime
字段的值,会设置为System.currentTimeMillis()
,生成的代码如下:
@Component
public class MyMapperImpl implements MyMapper {
@Override
public Target toTarget(Source source) {
Target target = new Target();
target.setCreateTime( System.currentTimeMillis() );
return target;
}
}
做映射时,默认情况下,从source 字段到target 字段是直接使用 get/set,如下:
@Data
public class Source {
private String name;
}
@Data
public class Target {
private String name;
}
@Mapper(componentModel = "spring")
public interface MyMapper {
Target toTarget(Source source);
}
生成的转化代码类如下:
@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
:
@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();
}
}
生成的代码如下:
@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;
}
}
一款一键调用set、get方法的插件;当开发中遇到一个大对象需要初始化,或者要获取一个大对象中的属性时,就单纯是调用他的get、set方法,就能让人写的人手软,这款插件就能完美的帮我们解决这个体力活。
Alt + Enter
,选择是生成get还是set,几个生成,set的生成有两种方式,一种是不赋值,一种是赋予属性的默认值,可以根据自己的实际情况来定:
程序员一定要善于利用工具,借助工具快速完成开发 任务,就像官网已经推出了AI助手,很多人还没用过,其实有了AI助手很多代码都能通过提示自动生成,很多大佬也预言未来不需要程序员,编程的门槛已经变得越来越低,掌握AI工具的程序员对那些手写的肯定是降维打击,程序员一定要拥抱变化,唯一不变的就是变化,希望看到文章的朋友都能有所启发!