interface로 멤버 레파지토리 생성
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();
void clearStore();
}
생성할때 option 눌러서 한번에 메서드 생성
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;
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());
}
public void clearStore() {
store.clear();
}
}
멤버 서비스
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository ;//= new MemoryMemberRepository();
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
public Long join(Member member) {
//중복이름 안됨
volidataDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}
private void volidataDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원");
});
}
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
컨트롤러
package hello.hellospring.controller;
import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired //빈 컨트롤에 있는걸 넣어준다
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
//url mapping
@GetMapping("/members/new")
public String createFrom(){
//템플릿에서 찾아본다.
return "members/createMemberFrom";
}
@PostMapping("/members/new")
public String create(MemberForm form){
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
//처음 화면으로 돌아가기
return "redirect:/";
}
@GetMapping("/members")
public String list(Model model){
List<Member> members = memberService.findMembers();
model.addAttribute("members",members);
return "members/memberList";
}
}
'Spring > 스프링_정리' 카테고리의 다른 글
[베이직] 스프링 컨테이너와 스프링 빈 조회 (1) | 2024.01.08 |
---|---|
[인프런베이직] 객체지향설계의 5가지 원칙 중 3개 (0) | 2023.12.21 |
[베이직] 스프링의 핵심 원리 이해 (1) | 2023.12.20 |
[인프런-스프링입문] 스프링 웹 개발 기초 (0) | 2023.12.13 |
[인프런 - 스프링 입문] 스프링 환경설정 (0) | 2023.12.13 |