이때까지 사용자가 입력한 회원 정보를 데이터 베이스에 저장해보았다.
이번에는 저장한 정보를 데이터 베이스로 부터 받아서 view에서 표시해보자.
1. 컨트롤러
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("members")
public String showMemberList(Model model){
// 저장되어 있는 회원들의 정보를 데이터베이스로 부터 가져와야 함
// 모델에 회원 객체를 저장
// 뷰 리턴
return "members/showMemberList";
}
}
@GetMapping 에서 필요한 로직은 데이터베이스로 부터 정보를 들고와야 하고, 들고 온 정보를 view에다가 뿌려주는 기능이 필요하다.
데이터베이스로 부터 회원 정보를 받는 기능은 Database -> MemberRepository -> MemberService -> MemberController @GetMapping 순서로 진행될 것이다.
들고 온 회원 정보는 model.addAttribute를 이용하여 view에 넘겨줄 예정이다.
아래에서 완성된 MemberController를 확인해 보자
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
}
2. 서비스
@Service
@Transactional(readOnly = true)
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// 회원 전체 조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
}
로직은 존재하지 않는다, 컨트롤러와 리포지토리를 연결해주는 역할만 하고 있다.
3. 리포지토리
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
public MemberRepository(EntityManager em) {
this.em = em;
}
public List<Member> findAll(){
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
}
직접 query문을 작성하여 database로 부터 정보를 받아오고 있다.
query문을 작성하는 방법은 JPQL 사용방법을 검색하면 확인할 수 있다.
- getResultList() : 결과를 리스트로 반환하고 없다면 빈 리스트를 반환 -> null 걱정이 없음
- getSingleResult() : 결과가 정확히 하나일 때만 사용
- 둘 이상이면 NonUniqueResultException
- 결과가 없으면 NoResultException
- 결과가 없는데 exception이 터지면 try catch 써야하는게 너무 불편해서 spring data jpa에서는 NoResultException이 터지만 그냥 null이나 optional로 반환함
'강의 > 실전! 스프링 부트와 JPA 활용1' 카테고리의 다른 글
회원 등록 (0) | 2021.07.07 |
---|---|
h2 database 초기 실행 (0) | 2021.06.21 |
프로젝트 생성 (0) | 2021.06.21 |