Spring/spring_old

05./ Spring excersise-Member-01-domain and repository

slow333 2023. 1. 11. 16:22

domain에 저장할 class 정의 ==> interface 정의 ==> interface 구현한 class

 

1. 우선 domain을 정의하고 db에 넣을 정보에 대한 class를 정의함

 

domain 정의 : 회원 정보(객체) 생성하기 =>  id, name, registedDate

public class Member {
  private Long id;
  private String name;
  private Date regDate;

  public Long getId() {    return id;  }
  public void setId(Long id) {    this.id = id;  }
  public String getName() {  return name; }
  public void setName(String name) { this.name = name;  }
  public Date getRegDate() {   return regDate;  }
  public void setRegDate(Date regDate) {  this.regDate = regDate; }

  @Override
  public String toString() {
    return "Member{ id=" + id + ", name='" + name +
            ", regDate=" + regDate +'}';
  }
}

2. 다음으로 저장을 관리하기 위한 interface를 정의

save, findById, findByName, findAll (null이 발생할 수 있으면 Optional로 감싸줌)

public interface MemberRepository {
  Member save(Member member);
  Optional<Member> findById(Long id);
  Optional<Member> findByName(String name);
  List<Member> findAll();
}

 

3. 실제 데이터를 넣을 class를 정의

public class MemoryMemberRepository implements MemberRepository{

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

  @Override
  public Member save(Member member) {
    member.setId(++countId);
    member.setRegDate(new Date());
    store.put(member.getId(), member);
    return member;
  }

  @Override
  public Optional<Member> findById(Long id) {
    return Optional.ofNullable(store.get(id));
  }

  @Override
  public Optional<Member> findByName(String name) {

    return store.values().stream()
            .filter(member -> member.getName().equals(name))
//            .collect(Collectors.toList());
            .findAny();
  }

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