전체 패키지의 구조는 아래와 같다.
entity, dto, JpaAuditingConfig 순으로 작성하였다.
데이터베이스에 저장되는 데이터 객체로, 데이터베이스와 직접적으로 연결된다.
package todolist.entity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TodoEntity extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
public TodoEntity(String title) {
this.title = title;
}
public TodoEntity update(String title) {
this.title = title;
return this;
}
}
package todolist.entity;
public class MemberEntity {
private Long seq;
private String id;
private String pw;
public Long getSeq() {
return seq;
}
public void setSeq(Long seq) {
this.seq = seq;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
}
BaseEntity의 경우 JpaAuditing에서 작성한다.
클라이언트와 서버 간 데이터 전송을 위해 설계된 객체이다.
요청을 받아오기 위해 필요한 클래스이다.
package todolist.dto;
import lombok.Data;
@Data
public class TodoRequest {
private String title;
}
요청에 응답하기 위해 필요한 클래스이다.
요청에 편리하게 응답하기 위해 TodoEntity를 파라미터로 받는 생성자를 추가했다.
package todolist.dto;
import todolist.entity.TodoEntity;
public class TodoResponse {
private Long id;
private String title;
public TodoResponse(TodoEntity todoEntity) {
this.id = todoEntity.getId();
this.title = todoEntity.getTitle();
}
}
Entity를 보고있다가 DB에 저장하거나 업데이트를 하는 경우 생성일자, 생성자, 수정일자, 수정자 등 중요한 메타데이터를 자동으로 데이터베이스에 반영해주는 기능이다.
여기서는 생성일자, 수정일자만 사용했다.
package todolist.entity;
import lombok.Getter;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
// 시간 데이터 (JPA Auditing)
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
private LocalDateTime createdAt; // 생성일시
private LocalDateTime modifiedAt; // 수정일시
}
package todolist.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
// 시간 데이터(생성, 수정 시간)을 자동으로 등록하기 위해서 필요하다.
@Configuration
@EnableJpaAuditing
public class JpaAuditingConfig {
}