0
点赞
收藏
分享

微信扫一扫

使用Lombok优化代码

简介

Lombok项目是一个Java库,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码,简洁且易于维护的Java类。

使用工具

IDEA2018.2 MySQL5.6 JDK1.8

使用jar包

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

环境搭建

代码示例

优化Student.java代码

Student.java

package&nbsp;com.vvcat.gitee.bean;

import&nbsp;lombok.*;

import&nbsp;javax.persistence.*;

/**
 * @ToString(callSuper=true,exclude="someExcludedField")
 * 类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。
 * 通过将includeFieldNames参数设为true,就能明确的输出toString()属性。
 *
 * @RequiredArgsConstructor(staticName = "Student")
 * 注解在类上,会生成构造方法(可能带参数也可能不带参数)。
 * 注意:如果带参数,这参数只能是以 final 修饰的未经初始化的字段或者是以 @NonNull 注解的未经初始化的字段。
 * 该注解还可以用 @RequiredArgsConstructor(staticName="methodName") 的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象
 *
 * @NonNull
 * 该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。
 */

@Entity
@Table(name&nbsp;=&nbsp;&quot;student&quot;)//数据库表明
@ToString(callSuper=true,exclude=&quot;age&quot;,includeFieldNames&nbsp;=&nbsp;true)&nbsp;//使用lombok 重写toSting方法 默认的toString格式
@NoArgsConstructor&nbsp;&nbsp;&nbsp;//无参构造器
@RequiredArgsConstructor(staticName&nbsp;=&nbsp;&quot;Student&quot;)&nbsp;&nbsp;//部分参数构造器
@AllArgsConstructor(access&nbsp;=&nbsp;AccessLevel.PROTECTED)&nbsp;&nbsp;//全参构造器
public&nbsp;class&nbsp;Student&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;@Id//声明id为主键
&nbsp;&nbsp;&nbsp;&nbsp;@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;=&nbsp;GenerationType.IDENTITY)//声明自动增长
&nbsp;&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;id&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;id;

&nbsp;&nbsp;&nbsp;&nbsp;@NonNull&nbsp;&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 stuName  为构造方法中的参数
&nbsp;&nbsp;&nbsp;&nbsp;@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;stuName&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;//定义字段也是有讲究的,比如首字母小写,后边的驼峰,对应的数据库字段,遇到驼峰用下划线断开
&nbsp;&nbsp;&nbsp;&nbsp;//比如实体类定义的userName,则数据库字段为user_name,
&nbsp;&nbsp;&nbsp;&nbsp;//比如实体类定义的username,则数据库字段也为username
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;stu_name;

&nbsp;&nbsp;&nbsp;&nbsp;@NonNull&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 age 为构造方法中的参数
&nbsp;&nbsp;&nbsp;&nbsp;@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;age&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;age;

&nbsp;&nbsp;&nbsp;&nbsp;@NonNull&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 sex 为构造方法中的参数
&nbsp;&nbsp;&nbsp;&nbsp;@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
&nbsp;&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;sex&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;sex;

}

使用说明

1. @ToString注解

  • @ToString(callSuper=true,exclude=“age”)
  • 类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。
  • 通过将includeFieldNames参数设为true,就能明确的输出toString()属性。

@ToString注解的使用可以代替快捷键Alt + Insert中ToString方法的生成

快捷键Alt + Insert生成的ToString方法:

@Override
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;toString()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;Student{&quot;&nbsp;+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;id=&quot;&nbsp;+&nbsp;id&nbsp;+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;,&nbsp;stu_name=&#39;&quot;&nbsp;+&nbsp;stu_name&nbsp;+&nbsp;&#39;\&#39;&#39;&nbsp;+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;,&nbsp;age=&quot;&nbsp;+&nbsp;age&nbsp;+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;,&nbsp;sex=&#39;&quot;&nbsp;+&nbsp;sex&nbsp;+&nbsp;&#39;\&#39;&#39;&nbsp;+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;}&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;}

使用@ToString注解生成的ToString方法:

public&nbsp;String&nbsp;toString()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;Student(super=&quot;&nbsp;+&nbsp;super.toString()&nbsp;+&nbsp;&quot;,&nbsp;id=&quot;&nbsp;+&nbsp;this.getId()&nbsp;+&nbsp;&quot;,&nbsp;stu_name=&quot;&nbsp;+&nbsp;this.getStu_name()&nbsp;+&nbsp;&quot;,&nbsp;age=&quot;&nbsp;+&nbsp;this.getAge()&nbsp;+&nbsp;&quot;,&nbsp;sex=&quot;&nbsp;+&nbsp;this.getSex()&nbsp;+&nbsp;&quot;)&quot;;
}

2. @Setter和@Getter注解

@Setter和@Getter注解 的使用可以代替快捷键Alt + Insert中Setter和Getter方法的生成
快捷键Alt + Insert生成的Setter和Gette方法:

public&nbsp;String&nbsp;getStu_name()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;stu_name;
}

public&nbsp;void&nbsp;setStu_name(String&nbsp;stu_name)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
}

使用@Setter和@Getter注解生成的Setter和Getter方法:

public&nbsp;void&nbsp;setStu_name(String&nbsp;stu_name)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
}

public&nbsp;String&nbsp;getStu_name()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.stu_name;
}

在 private String stu_name; 添加@Setter和@Getter注解后再添加@NonNull注解

@NonNull&nbsp;&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 stuName  为构造方法中的参数
@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
@Column(name&nbsp;=&nbsp;&quot;stuName&quot;)//声明数据库对应的字段
private&nbsp;String&nbsp;stu_name;

生成的Setter和Getter方法:

public&nbsp;void&nbsp;setStu_name(@NonNull&nbsp;String&nbsp;stu_name)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(stu_name&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;stu_name&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

@NonNull
public&nbsp;String&nbsp;getStu_name()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.stu_name;
}

@NonNull 该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。

3. @NoArgsConstructor注解

@NoArgsConstructor注解 的使用可以代替快捷键Alt + Insert中Constructor方法的生成
快捷键Alt + Insert生成的Constructor方法:

public&nbsp;Student()&nbsp;{
}

使用@NoArgsConstructor注解生成的Constructor方法:

public&nbsp;Student()&nbsp;{
}

4. @RequiredArgsConstructor注解

  • @RequiredArgsConstructor(staticName = “Student”)
  • 注解在类上,会生成构造方法(可能带参数也可能不带参数)。
  • 注意:如果带参数,这参数只能是以 final 修饰的未经初始化的字段或者是以 @NonNull 注解的未经初始化的字段。

使用@RequiredArgsConstructor 需要在封装的属性上添加@NonNull注解
例如(下面例子中没有为id 添加 @NonNull )

@Id//声明id为主键
@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
@GeneratedValue(strategy&nbsp;=&nbsp;GenerationType.IDENTITY)//声明自动增长
@Column(name&nbsp;=&nbsp;&quot;id&quot;)//声明数据库对应的字段
private&nbsp;Integer&nbsp;id;

@NonNull&nbsp;&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 stuName  为构造方法中的参数
@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
@Column(name&nbsp;=&nbsp;&quot;stuName&quot;)//声明数据库对应的字段
//定义字段也是有讲究的,比如首字母小写,后边的驼峰,对应的数据库字段,遇到驼峰用下划线断开
//比如实体类定义的userName,则数据库字段为user_name,
//比如实体类定义的username,则数据库字段也为username
private&nbsp;String&nbsp;stu_name;

@NonNull&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 age 为构造方法中的参数
@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
@Column(name&nbsp;=&nbsp;&quot;age&quot;)//声明数据库对应的字段
private&nbsp;Integer&nbsp;age;

@NonNull&nbsp;&nbsp;&nbsp;//使用@NonNull注解,指定 sex 为构造方法中的参数
@Setter&nbsp;&nbsp;&nbsp;//为代码添加Setter方法
@Getter&nbsp;&nbsp;&nbsp;//为代码添加Getter方法
@Column(name&nbsp;=&nbsp;&quot;sex&quot;)//声明数据库对应的字段
private&nbsp;String&nbsp;sex;

@RequiredArgsConstructor注解 的使用可以代替快捷键Alt + Insert中Constructor方法的生成
快捷键Alt + Insert生成的Constructor方法:

public&nbsp;Student(String&nbsp;stu_name,&nbsp;Integer&nbsp;age,&nbsp;String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;
&nbsp;&nbsp;&nbsp;&nbsp;this.sex&nbsp;=&nbsp;sex;
}

使用@RequiredArgsConstructor注解生成的Constructor方法:

private&nbsp;Student(@NonNull&nbsp;String&nbsp;stu_name,&nbsp;@NonNull&nbsp;Integer&nbsp;age,&nbsp;@NonNull&nbsp;String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(stu_name&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;stu_name&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(age&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;age&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(sex&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;sex&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.sex&nbsp;=&nbsp;sex;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

  • 该注解还可以用 @RequiredArgsConstructor(staticName=“methodName”) 的形式生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象
    例如:

@RequiredArgsConstructor(staticName&nbsp;=&nbsp;&quot;Test&quot;)&nbsp;&nbsp;//部分参数构造器

使用@RequiredArgsConstructor注解生成的Constructor方法:

public&nbsp;static&nbsp;Student&nbsp;Test(@NonNull&nbsp;String&nbsp;stu_name,&nbsp;@NonNull&nbsp;Integer&nbsp;age,&nbsp;@NonNull&nbsp;String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Student(stu_name,&nbsp;age,&nbsp;sex);
}

5. @AllArgsConstructor注解

@AllArgsConstructor注解 的使用可以代替快捷键Alt + Insert中Constructor方法的生成
快捷键Alt + Insert生成的Constructor方法:

public&nbsp;Student(Integer&nbsp;id,String&nbsp;stu_name,&nbsp;Integer&nbsp;age,&nbsp;String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;
&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;
&nbsp;&nbsp;&nbsp;&nbsp;this.sex&nbsp;=&nbsp;sex;
}

使用@AllArgsConstructor注解生成的Constructor方法:

@ConstructorProperties({&quot;id&quot;,&nbsp;&quot;stu_name&quot;,&nbsp;&quot;age&quot;,&nbsp;&quot;sex&quot;})
protected&nbsp;Student(Integer&nbsp;id,&nbsp;String&nbsp;stu_name,&nbsp;Integer&nbsp;age,&nbsp;String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;
&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;
&nbsp;&nbsp;&nbsp;&nbsp;this.sex&nbsp;=&nbsp;sex;
}

在属性上添加上@NonNull注解后,使用@AllArgsConstructor注解生成的Constructor方法:

@ConstructorProperties({&quot;id&quot;,&nbsp;&quot;stu_name&quot;,&nbsp;&quot;age&quot;,&nbsp;&quot;sex&quot;})
protected&nbsp;Student(Integer&nbsp;id,&nbsp;@NonNull&nbsp;String&nbsp;stu_name,&nbsp;@NonNull&nbsp;Integer&nbsp;age,&nbsp;@NonNull&nbsp;String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(stu_name&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;stu_name&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(age&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;age&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(sex&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException(&quot;sex&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.sex&nbsp;=&nbsp;sex;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

6.@NonNull注解

该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。

7.@Data注解

@Data注解在 类 上;提供类所有属性的 get 和 set 方法,此外还提供了equals、canEqual、hashCode、toString 方法。

在使用注解时的代码:

import&nbsp;lombok.*;
import&nbsp;javax.persistence.*;

@Entity
@Table(name&nbsp;=&nbsp;&quot;student&quot;)//数据库表明
@Data&nbsp;&nbsp;//使用Data注解
public&nbsp;class&nbsp;Student&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;@Id//声明id为主键
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(strategy&nbsp;=&nbsp;GenerationType.IDENTITY)//声明自动增长
&nbsp;&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;id&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;id;

&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;stuName&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;stu_name;

&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;age&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;age;

&nbsp;&nbsp;&nbsp;@Column(name&nbsp;=&nbsp;&quot;sex&quot;)//声明数据库对应的字段
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;sex;

}

使用@Data注解编译后自动生成的代码:

import&nbsp;javax.persistence.Column;
import&nbsp;javax.persistence.Entity;
import&nbsp;javax.persistence.GeneratedValue;
import&nbsp;javax.persistence.GenerationType;
import&nbsp;javax.persistence.Id;
import&nbsp;javax.persistence.Table;

@Entity
@Table(
&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;&quot;student&quot;
)
public&nbsp;class&nbsp;Student&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;@Id
&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strategy&nbsp;=&nbsp;GenerationType.IDENTITY
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;@Column(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;&quot;id&quot;
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;id;
&nbsp;&nbsp;&nbsp;&nbsp;@Column(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;&quot;stuName&quot;
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;@Column(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;&quot;age&quot;
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;age;
&nbsp;&nbsp;&nbsp;&nbsp;@Column(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;&quot;sex&quot;
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;sex;

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Student()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Integer&nbsp;getId()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.id;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getStu_name()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Integer&nbsp;getAge()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.age;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getSex()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.sex;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setId(Integer&nbsp;id)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setStu_name(String&nbsp;stu_name)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stu_name&nbsp;=&nbsp;stu_name;
&nbsp;&nbsp;&nbsp;&nbsp;}

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

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setSex(String&nbsp;sex)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.sex&nbsp;=&nbsp;sex;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;equals(Object&nbsp;o)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(o&nbsp;==&nbsp;this)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(!(o&nbsp;instanceof&nbsp;Student))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Student&nbsp;other&nbsp;=&nbsp;(Student)o;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!other.canEqual(this))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label59:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;this$id&nbsp;=&nbsp;this.getId();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;other$id&nbsp;=&nbsp;other.getId();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this$id&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(other$id&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break&nbsp;label59;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(this$id.equals(other$id))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break&nbsp;label59;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;this$stu_name&nbsp;=&nbsp;this.getStu_name();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;other$stu_name&nbsp;=&nbsp;other.getStu_name();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this$stu_name&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(other$stu_name&nbsp;!=&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(!this$stu_name.equals(other$stu_name))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;this$age&nbsp;=&nbsp;this.getAge();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;other$age&nbsp;=&nbsp;other.getAge();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this$age&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(other$age&nbsp;!=&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(!this$age.equals(other$age))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;this$sex&nbsp;=&nbsp;this.getSex();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;other$sex&nbsp;=&nbsp;other.getSex();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this$sex&nbsp;==&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(other$sex&nbsp;!=&nbsp;null)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(!this$sex.equals(other$sex))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;boolean&nbsp;canEqual(Object&nbsp;other)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;other&nbsp;instanceof&nbsp;Student;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;hashCode()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;PRIME&nbsp;=&nbsp;true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result&nbsp;=&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;$id&nbsp;=&nbsp;this.getId();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result&nbsp;=&nbsp;result&nbsp;*&nbsp;59&nbsp;+&nbsp;($id&nbsp;==&nbsp;null&nbsp;?&nbsp;43&nbsp;:&nbsp;$id.hashCode());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;$stu_name&nbsp;=&nbsp;this.getStu_name();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;result&nbsp;*&nbsp;59&nbsp;+&nbsp;($stu_name&nbsp;==&nbsp;null&nbsp;?&nbsp;43&nbsp;:&nbsp;$stu_name.hashCode());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;$age&nbsp;=&nbsp;this.getAge();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;result&nbsp;*&nbsp;59&nbsp;+&nbsp;($age&nbsp;==&nbsp;null&nbsp;?&nbsp;43&nbsp;:&nbsp;$age.hashCode());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;$sex&nbsp;=&nbsp;this.getSex();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;result&nbsp;*&nbsp;59&nbsp;+&nbsp;($sex&nbsp;==&nbsp;null&nbsp;?&nbsp;43&nbsp;:&nbsp;$sex.hashCode());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;toString()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;Student(id=&quot;&nbsp;+&nbsp;this.getId()&nbsp;+&nbsp;&quot;,&nbsp;stu_name=&quot;&nbsp;+&nbsp;this.getStu_name()&nbsp;+&nbsp;&quot;,&nbsp;age=&quot;&nbsp;+&nbsp;this.getAge()&nbsp;+&nbsp;&quot;,&nbsp;sex=&quot;&nbsp;+&nbsp;this.getSex()&nbsp;+&nbsp;&quot;)&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

其它注解

@Log4j
@EqualsAndHashCode
@Cleanup
@Value
@SneakyThrows
@Synchronized

目前刚开始接触,还未使用到,日后用到之后,再进行补充说明

举报

相关推荐

0 条评论