[To do List] 리포지토리 구현

oh_eol·2024년 1월 22일
0

To-do-List

목록 보기
3/5
post-thumbnail

전체 패키지 구조

전체 패키지 구조는 다음과 같다.


Repository

repository는 데이터베이스와 데이터를 주고 받기 위한 인터페이스를 정의한 부분이다.
실제 데이터를 저장하고 있는 클래스가 아니라, 데이터를 주고 받는 인터페이스인 점을 기억하자.

TodoRepository

JPA repository 인터페이스를 상속받아 작성하였다. 제네릭의 경우 DB 테이블과 연결될 객체인 TodoEntity 타입과 해당 객체의 id 필드인 Long 타입으로 정의해준다.

package todolist.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import todolist.entity.TodoEntity;

public interface TodoRepository extends JpaRepository<TodoEntity, Long> {
}

MemberRepository

Interface 로 save, findBySeq, findById, findAll, clearStore 메소드를 선언한다.

package todolist.repository;

import todolist.entity.MemberEntity;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    MemberEntity save(MemberEntity memberEntity);

    Optional<MemberEntity> findBySeq(Long seq);
    Optional<MemberEntity> findById(String id);
    List<MemberEntity> findAll();

    void clearStore();
}

MemoryMemberRepository

MemberReporitory를 상속 받아서 앞서 선언한 메소드를 구현한다.

package todolist.repository;

import todolist.entity.MemberEntity;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository {

    private static Map<Long, MemberEntity> store = new HashMap<>();
    private static Long sequence = 0L;

    @Override
    public MemberEntity save(MemberEntity memberEntity) {
        memberEntity.setSeq(++sequence);
        store.put(memberEntity.getSeq(), memberEntity);
        return memberEntity;
    }

    @Override
    public Optional<MemberEntity> findBySeq(Long seq) {
        return Optional.ofNullable(store.get(seq));
    }

    @Override
    public Optional<MemberEntity> findById(String id) {
        return store.values().stream()
                .filter(memberEntity -> memberEntity.getId().equals(id))
                .findAny();
    }

    @Override
    public List<MemberEntity> findAll() {
        return new ArrayList<>(store.values());
    }

    @Override
    public void clearStore() {
        store.clear();
    }
}
profile
공부 중입니다.

0개의 댓글