회원 목록 조회

2023. 5. 18. 08:02카테고리 없음

회원 목록 컨트롤러

package jpabook.jpashop.web; 
@Controller
@RequiredArgsConstructor 
public class MemberController {
//추가
@GetMapping(value = "/members") 
public String list(Model model) {
        List<Member> members = memberService.findMembers(); 
        //간단하게 멤버서비스에서 멤버 다 가져오면 됨.
        model.addAttribute("members", members);}
}
return "members/memberList";

 

회원 목록 HTML

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/header :: header" />
<body>
<div class="container">
  <div th:replace="fragments/bodyHeader :: bodyHeader" />
  <div>
    <table class="table table-striped">
      <thead>
      <tr>
        <th>#</th>
        <th>이름</th>
        <th>도시</th>
        <th>주소</th>
        <th>우편번호</th>
      </tr>
      </thead>
      <tbody>
      <tr th:each="member : ${members}">
        <td th:text="${member.id}"></td>
        <td th:text="${member.name}"></td>
        <td th:text="${member.address?.city}"></td>
        <td th:text="${member.address?.street}"></td>
        <td th:text="${member.address?.zipcode}"></td>
      </tr>
      </tbody></table>
  </div>
  <div th:replace="fragments/footer :: footer" />
</div> <!-- /container -->
</body>
</html>

 

 참고: 폼객체 vs 엔티티직접사용

참고: 요구사항이정말 단순할때는 폼 객체( MemberForm ) 없이 엔티티( Member )를 직접등록과 수정 
화면에서 사용해도된다. 하지만 화면요구사항이복잡해지기 시작하면, 엔티티에 화면을 처리하기 위한 
기능이 점점 증가한다. 결과적으로 엔티티는 점점 화면에 종속적으로변하고, 이렇게 화면기능 때문에 
지저분해진 엔티티는 결국 유지보수하기 어려워진다.
실무에서 엔티티는 핵심 비즈니스로직만 가지고 있고, 화면을 위한 로직은 없어야 한다. 화면이나 API에 
맞는 폼객체나 DTO를 사용하자. 그래서 화면이나 API 요구사항을 이것들로처리하고, 엔티티는 최대한 
순수하게 유지하자.

 

※API를 만들땐 절대로 엔티티를 외부로 반환하면 안된다.※

 

 

출처 : 인프런 강의: 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강

www.inflearn.com