- JPA를 이용할 때는 테이블과 SQL을 다루는 것이 아니라 데이터에 해당하는 개체를 엔티티 객체라는 것으로 다루고 JPA로 이를 데이터베이스와 연동해서 관리한다.
- 엔티티 객체는 쉽게 말해서 PK(기본키)를 가지는 자바의 객체이다. 엔티티 객체는 고유의 식별을 위해 @Id를 이용해서 객체를 구분하고 관리한다.
- Spring Data JPA는 자동으로 객체를 생성하고 이를 통해서 예외 처리 등을 자동으로 처리하는데 이를 위해서 제공되는 인터페이스가 JpaRepository이다.
- 엔티티 클래스는 반드시 @Entity가 존재하고, 해당 엔티티 객체의 구분을 위한 @Id가 필요하다.
@MappedSuperclass
@EntityListeners(value = { AuditingEntityListener.class})
@Getter
public class BaseEntity {
@CreatedDate
@Column(name = "regdate", updatable = false)
private LocalDateTime regDate;
@LastModifiedDate
@Column(name = "moddate")
private LocalDateTime modDate;
}
- @MappedSuperclass: 이 어노테이션은 JPA(Java Persistence API) 엔티티 클래스의 공통 속성을 정의하기 위해 사용됩니다. BaseEntity 클래스가 다른 엔티티 클래스에서 상속받을 때, @MappedSuperclass 어노테이션이 지정된 클래스의 필드도 상속됩니다.
- @EntityListeners(value = { AuditingEntityListener.class}): 이 어노테이션은 JPA 엔티티의 이벤트를 수신하는 엔티티 리스너를 지정합니다. AuditingEntityListener 클래스는 엔티티의 생성 및 수정 시점에 자동으로 날짜 필드를 업데이트하는 데 사용될 것입니다.
- @Getter: 이 어노테이션은 Lombok 라이브러리에서 제공되는 것으로, 자동으로 해당 클래스의 필드에 대한 Getter 메서드를 생성해줍니다. regDate와 modDate 필드에 대한 Getter 메서드가 자동으로 생성될 것입니다.
- @CreatedDate: 이 어노테이션은 Spring Data JPA의 Auditing 기능을 사용하여 엔티티가 생성될 때 자동으로 해당 필드를 현재 날짜와 시간으로 설정합니다. regDate 필드는 생성 시점의 날짜와 시간으로 자동으로 설정될 것입니다.
- @Column(name = "regdate", updatable = false): 이 어노테이션은 엔티티의 속성을 데이터베이스 테이블의 컬럼과 매핑할 때 사용됩니다. regDate 필드는 regdate라는 이름의 컬럼과 매핑될 것입니다. updatable = false로 설정되어 있으므로, 이 필드는 수정되지 않도록 설정됩니다.
- @LastModifiedDate: 이 어노테이션은 Spring Data JPA의 Auditing 기능을 사용하여 엔티티가 수정될 때 자동으로 해당 필드를 현재 날짜와 시간으로 설정합니다. modDate 필드는 수정 시점의 날짜와 시간으로 자동으로 설정될 것입니다.
위의 어노테이션들은 JPA와 Spring Data JPA의 기능을 사용하여 엔티티의 생성 및 수정 시점에 자동으로 날짜 필드를 업데이트하도록 지원합니다.
@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Board extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long bno;
@Column(length = 500, nullable = false) //컬럼의 길이와 null 허용여부
private String title;
@Column(length = 2000, nullable = false)
private String content;
@Column(length = 50, nullable = false)
private String writer;
public void change(String title, String content) {
this.title = title;
this.content = content;
}
}
- Board 클래스는 BaseEntity 클래스를 상속 받고, @Column에 name이 없을 경우 필드 이름과 동일한 컬럼에 적용된다.
- 데이터베이스에 insert를 실행하는 기능은 JpaRepository의 save()를 통해서 이루어진다. save()는 현재의 영속 컨텍스트 내에 데이터가 존재하는지 찾아보고 해당 엔티티 객체가 없을 때는 insert를, 존재할 때는 update를 자동으로 실행한다.
728x90
'Programming > Spring' 카테고리의 다른 글
Spring - 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) | 2023.06.09 |
---|---|
Spring - 스프링 핵심 원리 이해1 - 예제 만들기 (0) | 2023.06.09 |
Spring - 객체지향 설계 5원칙 SOLID (SRP, OCP, LSP, ISP, DIP) (0) | 2023.06.07 |
Spring - MVC 기본 동작 원리 (0) | 2023.06.05 |
Spring - @RequestParam, @ModelAtttribute, WebDataBinder (0) | 2023.06.02 |