如何简化实体类代码

Spring boot使用Lombok编码

添加依赖

在 pom.xml 文件中添加相关依赖:

<lombok.version>1.16.20</lombok.version>

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>

  

安装插件

由于 Lombok 采取的注解形式的,在编译后,自动生成相应的方法,为了不让 ide 疯了,需要下载插件了支持它。 
以 idea 为例:查找插件 lombok plugin 安装即可。

用我的 User 实体类为例(set,get,toString 方法),

@Getter
@Setter
@ToString
public class SysUserEntity implements Serializable

  

在按快捷键 Ctrl + F12,可以查找到set,get,toString 方法。

注解

写点常用的,其余的 api 的打开 Jar 包一目了然

@[email protected]@[email protected]构造函数
@AllArgsConstructor

会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验, 
全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,参数的顺序与属性定义的顺序一致。

@NoArgsConstructor

无参构造函数

@RequiredArgsConstructor

会生成一个包含常量(final),和标识了@NotNull的变量 的构造方法。

怎么使用

它们都有三个参数可以设置 
1. String staticName() default "";

如果设置了它,将原来的构造方法的访问修饰符将会变成 私有的,而外添加一个静态构造方法,参数相同,名字是设置的字符串的名字,访问修饰符为公有的。

  1. AnyAnnotation[] onConstructor() default {}; 
    在构造方法上添加注解。使用方法@RequiredArgsConstructor([email protected]__({@AnnotationsGoHere}))}

    例如我们在 Spring 项目中需要注入多个值,写很多个 @Autowired 很麻烦,就可以使用这种方式:

    @Service
    @RequiredArgsConstructor(onConstructor = @__(@Autowired))
    public class UserServiceImpl implements IUserService {
       private final IUserRepository userRepository;
       private final IOrderRepository orderRepository;
    

      

  2. AccessLevel access() default lombok.AccessLevel.PUBLIC; 
    构造函数访问修饰符;
  3. @NoArgsConstructor无参构造函数中还有个注解 boolean force() default false; 
    作者的注释是 If {@code true}, initializes all final fields to 0 / null / false. Otherwise, a compile time error occurs.

    设置为 true 的时候,初始化所有的参数为默认值,否则编译错误。

@Data

我自己尝试了下,我们使用 @Data 注解就可以有下面几个注解的功能: @ToString@Getter@Setter@EqualsAndHashCode@NoArgsConstructor 。

注意的是,同时使用@Data 和 @AllArgsConstructor 后 ,默认的无参构造函数失效,如果需要它,要重新设置 @NoArgsConstructor

@Slf4j

//类上面注解了,直接调用 log 即可:

log.info(xxxx);
@Log

使用的是 java.util.logging.Logger ,直接使用 变量 log

@Builder

bulder 模式构建对象。

@Cleanup

<wiz_code_mirror>

@Cleanup 
InputStream in = new FileInputStream(args[0]);
@Cleanup 
OutputStream out = new FileOutputStream(args[1]);

自动化关闭流,相当于 jdk1.7 种的 try with resource

val

类型推导。

<wiz_code_mirror>

 val example = new ArrayList<String>();
 example.add("Hello, World!");

对应的转换后代码就是:

<wiz_code_mirror>

 val example = new ArrayList<String>();
 example.add("Hello, World!");
@NonNull

<wiz_code_mirror>

public NonNullExample(@NonNull Person person) {
    this.name = person.getName();
 }

转换后就是:

<wiz_code_mirror>

public NonNullExample(@NonNull Person person) {
    if (person == null) {
      throw new NullPointerException("person");
    }
    this.name = person.getName();
 }
@SneakyThrows

翻译就是暗中抛出异常

当我们需要抛出异常,在当前方法上调用,不用显示的在方法名后面写 throw

<wiz_code_mirror>

@SneakyThrows(Exception.class)
@Synchronized

方法中所有的代码都加入到一个代码块中,默认静态方法使用的是全局锁,普通方法使用的是对象锁,当然也可以指定锁的对象。

<wiz_code_mirror>

private final Object lock = new Object();
@Synchronized("lock")
public void foo() {
    // Do something
}

实际开发中往往将 synchronized 颗粒化到代码块中。

原文地址:https://www.cnblogs.com/shuchen007/p/10261334.html

时间: 2024-10-24 13:46:13

如何简化实体类代码的相关文章

尚硅谷-mybatis-解决字段名与实体类属性名不相同的冲突

项目结构: 准备表和数据: CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23); INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33); INSERT

MyBatis实体类属性与表字段不一致的4种解决方案

pom的依赖配置: 1 <dependencies> 2 <dependency> 3 <groupId>org.mybatis</groupId> 4 <artifactId>mybatis</artifactId> 5 <version>3.4.5</version> 6 </dependency> 7 <dependency> 8 <groupId>junit</

蜗牛—实体类与数据表的映射文件

Hibernate框架可以根据你写的映射文件直接对你的实体类进行增删改查等等数据库操作.传入的可以是一个实体对象. 首先是我的实体类代码 Position.java package com.attence.entity; public class Position { private int id; private String position_Name; private String desc; public int getId() { return id; } public void se

.net 实体类与json转换(.net自带类库实现)

注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Json; usin

【转】PowerDesigner物理数据表生成C#实体类Model

model实体类是什么: 在三层架构UI,BLL,DAL中,有时用户插入一条记录到数据库中,必然会有不少数据,按正常编程,也必然会一下子调用某个函数传入不少参数.为了减少参数的数量,达到高效简洁的效果,一般会用model实体类作为传输数据的载体. model实体类一般对应着数据库里的字段,一个类实体对应一张表.比如:user数据表 有id,password,name,那么实体类usr也相应id,password,name属性来作为数据载体.但是有时我们在PowerDesigner设计的数据库表太

自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 更有开发效率地使用CSV文件 为了更有效率地使用CSV文件,我制作了一个工具:Code代码生成器. 这个工具可以对CSV文件进行简单地配置,自动生成这个CSV文件对应的C++数据结构和字段类型解析函数代码. 工程项目只要加入这些自动生成的代码,就可以更方便地使用来自CSV配置文件的数据. 用工具自动生代码,可以省去了手工编写.手工维护那些大量的.无聊繁琐的类型定义.数据转换的代码的过

C++数据库实体类自动生成代码模块总结

M系统的关于位置管理服务,一直想抽出来做一个独立健壮的模块. 但C++下没有合适的数据库实体类,或者响应的代码生成工具. 找到一个生成C#的工具,照着生成出来的代码,国庆前写了一个entity代码生成类,主要功能是查询mysql information_schema表下的数据表结构,去生成增删查改的功能,实体类还附带加入了数据缓存. 其实这个homemake数据库实体类,就是DB+MemCache,真实的数据放在DB里,被提前申请的数据用内存来保存. 外部可以根据需要,查询真实数据,或者是内存缓

基于spring-boot-data-jdbc的RowMapper实例的初始化配置,配置内容和实体类的代码由测试类生成

spring-boot-data-jdbc的RowMapper配置(windows10+jdk8+idea+spring-boot2.1.5)项目url:https://github.com/zhzhair/jdbcrowmapper-spring-boot.git 启动项目初始化RowMapper配置,配置内容由代码生成: 1.基于mysql的jdbcTemplate的crud:用户反馈,运营回复.忽略,多条件动态查询反馈信息等: 2.添加记录时返回自增主键,批量删除,启动项目实例化所有Row

grpc proto文件生成java、.net实体类以及客户端代码

背景 工作中对接对方服务是GRPC,对方只提供了proto契约文件,需要自己生成对应的实体类以及客户端代码,故记录下操作流程. Java 代码生成 实体类: 通过protoc插件生成实体类 在 https://github.com/protocolbuffers/protobuf/releases 下载对应版本的protoc工具解压,我这边用的是3.1.0版本的 proto文件拷贝至protoc同目录,执行如下命令: protoc --java_out=./java/ hello.proto 对