domain 패키지 생성
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
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;
}
}
id는 임의의 값! 고객이 정하는 id가 아닌 시스템이 저장하는 id
name은 이름!
그리고 getter setter를 만들어줌
repositoy 패키지 생성
하고 인터페이스 생성!
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
1.save 회원을 저장하면 저장된 회원이 반환된
2.findById id로 회원을 찾는 기능
여기서 optional이란? 자바8의 기능으로
널이 있을경우에 널을 그대로 반환하는 방법 대신에
optional로 감싸서 반환하기 위해사용!
3.findByname 이름으로 회원을 찾는기능
4.모든 회원을 반환해줌
구현체를 만들어줌
클래스 생성!
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static Long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
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))
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
}
저장을 어딘가에 하기위해 Map 사용
키 : Long
값 : Member
store라고 이름지음
sequence는 키값을 생성해주는 기능!
0L 의미는 Long형 0이란 의미!
save : id 세팅 후 스토어에 저장하는 기능 구현!
findById : null값이 반환될 가능성이 있기때문에 Optional.ofNullable로 감싸서 반환!!
findByname : store에서 루프로 돌리면서 member.getName()과 파라미터로 넘어온 값이 같을때
필터링되고 찾으면 optional로반환!(람다식 사용)
findAll : Map이지만 반환은 List로 하기때문에 store.values()가 멤버들이기때문에 ArrayList에 넣어주고 반환!
'웹프로그래밍 > Spring 입문' 카테고리의 다른 글
| 8. 회원 서비스 개발 (0) | 2021.06.19 |
|---|---|
| 7. 회원 리포지토리 테스트 케이스 작성 (0) | 2021.06.19 |
| 5. 비즈니스 요구사항 정리 (0) | 2021.06.17 |
| 4. API (0) | 2021.06.17 |
| 3. MVC와 템플릿 엔진 (0) | 2021.06.16 |