Tina

Lombok 설정

밍밍이

밍밍이

Apr 06, 2021

의존성 추가

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

설치

참고 URL

Entity에서 사용 및 어노테이션 종류

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MUser{
//Entity 설계..
}

Getter

Getter를 자동으로 만들어준다.

Setter

Setter를 자동으로 만들어준다.

NoArgsConstructor

파람이 없는 생성자를 만들어준다. PROTECTED로 해야 외부에서 접근이 불가능하다.

AllArgsConstructor

모든 파람이 있는 생성자를 만들어준다.

@Builder
public MUser(String email, String pw, String name, String phone, int isEnabled, int isDeleted,
Date createStamp, Date modifyStamp, String modifier) {
this.email = email;
this.pw = pw;
this.name = name;
this.phone = phone;
this.isEnabled = isEnabled;
this.isDeleted = isDeleted;
this.createStamp = createStamp;
this.modifyStamp = modifyStamp;
this.modifier = modifier;
}

Builder

생성자 앞에 붙여 builder를 쓸 수 있게 해준다.

아래 경우처럼 생성자에 안쓰고 클래스 자체에 쓸 수도 있다.

@Entity
@Table(name="muser")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class MUser{

Data

Getter, Setter를 자동으로 만들어준다.

ToString

toString을 오버라이드해준다.

Temporal

@Temporal(TemporalType.TIMESTAMP)이 기본값이며 DATE, TIME, TIMESTAMP를 사용할 수 있다.

  • DATE : 년-월-일
  • TIME : 시:분:초
  • TIMESTAMP : 년-월-일 시:분:초. JPA 방언에 의해 DateTime이나 TimeStamp로 자동 작성된다.

Embedded

엔티티 안에 다른 도메인을 넣을 떄 엔티티 내 필드 위에 선언함.

Embeddable

다른 엔티티에 들어가는 도메인 클래스 위에 선언함.

적용된 소스 보기

Outline에 적용된 결과를 볼 수 있다.

구현 결과

로그인에 필요한 유저를 다음과 같이 정의하였다.

@Entity
@Table(name="muser")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class MUser{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable=false, length=40)
private String email;
@Column(nullable=false, length=40)
private String pw;
@Column(nullable=false, length=60)
private String name;
@Column(nullable=false, length=13)
private String phone;
@Column(length=40)
private String role = "user";
@Column(length=1)
private int isEnabled = 1;
@Column(length=1)
private int isDeleted = 0;
@Column
@Temporal(TemporalType.TIMESTAMP)
protected Date createStamp = new Date();
@Column
@Temporal(TemporalType.TIMESTAMP)
protected Date modifyStamp = new Date();
@Column(length=40)
private String modifier;
}

Builder 사용

아래 코드는 MUser user = new MUser();와 같은 기능을 수행한다.

MUser user = MUser.builder().build();
아래 코드는 `MUser user = new MUser(); user.setEmail("test@naver.com");`와 같은 기능을 수행한다.
MUser user = MUser.builder()
.email("test@naver.com")
.bulid();

위에서 기본값을 정의했지만 build할때 값을 안넣으면 값이 들어가있지 않는데 기본값을 무조건 넣도록 하려면 엔티티에서 @Builder.Default를 선언해줘야 한다.

@Column(length=1)
@Builder.Default
private int isEnabled = 1;