웹개발의 봄 spring 강의를 참고하여 타임라인 웹 서비스를 만들어보았다
api 설계는 이렇다

그리고 repository를 만들어 주었다
entity
package com.sparta.week03.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity
public class Memo extends Timestamped{
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column
private String username;
@Column
private String contents;
public Memo(String username, String contents){
this.username = username;
this.contents = contents;
}
public Memo(MemoRequestDto requestDto){
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
}
public class Memo extends Timestamped
이 부분이 확실하게 이해가 되지 않아서 구글에서 개념을 좀 더 찾아보았다
객체 지향 프로그래밍에서는 부모 클래스의 멤버를 자식 클래스에게 넘겨 줄 수 있는데, 이러한 과정은 코드를 줄여주고 부모 클래스의 수정으로 모든 자식 클래스를 수정할 수 있는 효과를 볼 수 있기 때문에 유지보수를 하는 데 있어 강점을 보인다
상속 방법은 extends라는 키워드를 이용해 사용한다
class 자식 extends 부모
그럼 나의 코드에서는 부모 클래스가 Timestamped 이고 자식클래스가 Memo이다
Timestamped(부모 클래스)에 있는 모든 정보들을 Memo(자식클래스)가 사용할 수 있다.
Timestamped.java
package com.sparta.week03.domain;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
public abstract class Timestamped {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
repository
package com.sparta.week03.domain;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByModifiedAtBetweenOrderByModifiedAtDesc(LocalDateTime start, LocalDateTime end);
}
dto
package com.sparta.week03.domain;
import lombok.Getter;
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}