스프링부트

BaseTimeEntity.java

여러 테이블에서 공통으로 사용되는 생성 시간, 수정 시간을 프로퍼티로 갖는 객체를 설계

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {
	
    @CreatedDate
    private LocalDateTime createdTime;
    
    @LastModifiedDate
    private LocalDateTime modifiedTime;

엔터티 클래스의 필드 이름은 자바의 관습인 camel 표기법으로 작성.

테이블의 컬럼 이름은 데이터베이스의 관습인 snake 표기법으로 작성.

 

@MappedSuperclass

다른 도메인(엔터티) 클래스의 상위 클래스로 사용됨.

상속하는 하위 클래스는 BaseTimeEntity가 정의하는 컬럼들을 갖게 됨.

 

@EntityListeners(AuditingEntityListener.class)

main 메서드를 갖고 있는 메인 클래스에서  JPA Auditing 기능이 활성화되어 있는 경우에 엔터티가 삽입/수정되는 시간이 자동으로 기록되도록 하기 위해서 사용.

 

@CreateDate

insert 될 때의 시간이 자동으로 기록 됨.

 

@LastModifiedDate

update 될 때의 시간이 자동으로 기록 됨.

 

 

Post.java

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@ToString
@Entity
@Table(name = "POSTS")
@SequenceGenerator(name = "POSTS_SEQ_GEN", sequenceName = "POSTS_SEQ", allocationSize = 1)
public class Post extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "POSTS_SEQ_GEN")
    private Long id;
    
    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;  
    
    @Column(nullable = false)
    private String author;
      
}

 

@Entity

JPA 엔터티 클래스 - 데이터베이스 테이블과 매핑되는 클래스.

 

@Table

엔터티 클래스의 이름이 데이터베이스 테이블이름과 다른 경우, 테이블 이름을 명시.

 

@SequenceGenerator

  • name - 기본 키 생성자 이름은 POSTS_SEQ_GEN
  • sequenceName - SEQ_GENERATOR가 사용할 데이터베이스의 시퀀스 객체는 POSTS_SEQ
  • allocationSize - 시퀀스 객체 호출 시 증가하는 값은 1로 지정

 

@GeneratedValue

  • 생성 전략을 GenerationType.SEQUENCE으로 지정
  • 기본 키 생성자를 POSTS_SEQ_GEN으로 지정

 

 

SpringApplication.java

@EnableJpaAuditing
@SpringBootApplication
public class Spring3Application {

	public static void main(String[] args) {
		SpringApplication.run(Spring3Application.class, args);
	}

}

 

@EnableJpaAuditing

JPA Auditing 기능을 활성화 함.

 

@SpringBootApplication

스프링 부트의 가장 기본적인 설정을 선언

+ Recent posts