Sangwon Coding
Spring Boot - JPA의 추가기능 (Builder, Chain) 본문
JpaConfig.java
package com.example.study.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
LoginUserAuditorAware.java
package com.example.study.component;
import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class LoginUserAuditorAware implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.of("AdminServer"); // 자동으로 AdminServer라는 이름 전달
}
}
AdminUser.java
package com.example.study.model.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@EntityListeners(AuditingEntityListener.class)
@Builder // 생성자 패턴 사용하기 쉽게해줌
@Accessors(chain = true)
public class AdminUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String account;
private String password;
private String status;
private String role;
private LocalDateTime lastLoginAt;
private LocalDateTime passwordUpdatedAt;
private int loginFailCount;
private LocalDateTime registeredAt;
private LocalDateTime unregisteredAt;
@CreatedDate
private LocalDateTime createdAt;
@CreatedBy
private String createdBy;
@LastModifiedDate
private LocalDateTime updatedAt;
@LastModifiedBy
private String updatedBy;
}
User.java
package com.example.study.model.entity;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity // ==table
@ToString(exclude = {"orderGroupList"})
@EntityListeners(AuditingEntityListener.class)
@Builder // 생성자 패턴 사용하기 쉽게해줌
@Accessors(chain = true)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String account;
private String password;
private String status;
private String email;
private String phoneNumber;
private LocalDateTime registeredAt;
private LocalDateTime unregisteredAt;
@CreatedDate
private LocalDateTime createdAt;
@CreatedBy
private String createdBy;
@LastModifiedDate
private LocalDateTime updatedAt;
@LastModifiedBy
private String updatedBy;
// User : OrderGroup = 1 : N
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private List<OrderGroup> orderGroupList;
}
위의 AdminUser.java 와 User.java 의 코드처럼 @Builder 와 @Accessors(chain = true) 를 모든 Entity에 추가해주고 밑의 공통변수인 createdAt, createdBy, updatedAt, updatedBy 역시 각각에 @CreatedDate, @CreatedBy, @LastModifiedDate, @LastModifiedBy 어노테이션들도 모든 Entity에 추가해준다.
User u = User.builder().account(account).password(password).status(status).build(); // 빌더 패턴
User u = new User().setAccount("").setEmail("").setPassword(""); // 체인 패턴
'Spring > Spring Boot (어드민 페이지)' 카테고리의 다른 글
Spring Boot - 사용자 API CRUD (0) | 2019.12.26 |
---|---|
Spring Boot - CRUD 인터페이스 정의와 ResponseBody 공통부 작성 (0) | 2019.12.23 |
Spring Boot - 연관관계 설정 (0) | 2019.12.06 |
Spring Boot - 테이블 테스트 (0) | 2019.12.02 |
Spring Boot - Entity 및 Repository 설정 (0) | 2019.12.02 |
Comments