[타임라인 서비스]-repository

김예진·2022년 11월 8일

java

목록 보기
7/21

웹개발의 봄 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;
}

0개의 댓글