개발

[Spring Boot] 스프링 부트 회원 목록 출력하기

changha. 2023. 2. 11. 17:55

이전 게시글

https://changha-dev.tistory.com/148

 

[Spring Boot] 스프링 부트 로그인 구현

이전 게시글 https://changha-dev.tistory.com/147 [Spring Boot] MySQL DB와 연동하기 이전 게시글에서 https://changha-dev.tistory.com/146 [Spring Boot ] 웹페이지 정보 -> Controller (http method) 전 게시글 https://changha-dev.tistory.

changha-dev.tistory.com

에서 로그인 구현까지 해봤습니다. 

 

이번 시간에는 DB에 저장 돼있는 회원정보들을 

웹페이지에서 조회 하는 기능을 살펴보겠습니다. 

 

@Controller
@RequiredArgsConstructor //MemberService에 대한 멤버를 사용 가능
public class MemberController {

    // 생성자 주입
    private final MemberService memberService;

    // 회원가입 페이지 출력 요청
    @GetMapping("/member/save")
    public String saveForm() {
        return "save";
    }

    @PostMapping("/member/save")    // name값을 requestparam에 담아온다
    public String save(@ModelAttribute MemberDTO memberDTO) {
        System.out.println("MemberController.save");
        System.out.println("memberDTO = " + memberDTO);
        memberService.save(memberDTO);

        return "login";
    }

    @GetMapping("/member/login")
    public String loginForm(){
        return "login";
    }


    @PostMapping("/member/login") // session : 로그인 유지
    public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session) {
        MemberDTO loginResult = memberService.login(memberDTO);
        if (loginResult != null) {
            // login 성공
            session.setAttribute("loginEmail", loginResult.getMemberEmail());
            return "main";
        } else {
            // login 실패
            return "login";
        }
    }

    @GetMapping("/member/")
    public String findAll(Model model) {
        List<MemberDTO> memberDTOList = memberService.findAll();
        // 어떠한 html로 가져갈 데이터가 있다면 model 사용
        model.addAttribute("memberList", memberDTOList);
        return "list";

    }
}
//MemberController.class

findAll 메서드를 추가 하겠습니다. 

 

메서드를 살펴보면 

1. memberService의 findAll메서드로 

   회원 목록 list를 가져옴 

 

2. model 에 list 담아서 html로 보냄 

 

위와 같은 과정을 거칩니다.

 

MemberService로 가서 findAll 메서드를 구현 하겠습니다.

public List<MemberDTO> findAll() {
        List<MemberEntity> memberEntityList = memberRepository.findAll();
        //Controller로 dto로 변환해서 줘야 함
        List<MemberDTO> memberDTOList = new ArrayList<>();
        for (MemberEntity memberEntity : memberEntityList){
            memberDTOList.add(MemberDTO.toMemberDTO(memberEntity));

        }
        return memberDTOList;

    }
//MemberService.class

memberRepository의 findAll 메서드를 이용합니다 

findAll 메서드 : 상속돼있는 JPA 의 메서드를 이용함 

 

repository에서는 entity를 이용하지만 

controller에서는 dto로 형태로 이용하므로 

for each문으로 변환 해주는 작업을 해줍니다. 

 

이제 list.html을 만들겠습니다. 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>list</title>
</head>
<body>
<h2>list.html</h2>
<table>
  <tr>
    <th>id</th>
    <th>memberEmail</th>
    <th>memberPassword</th>
    <th>memberName</th>
  </tr>
  <tr th:each="member: ${memberList}">
    <td th:text="${member.id}"></td>
    <td th:text="${member.memberEmail}"></td>
    <td th:text="${member.memberPassword}"></td>
    <td th:text="${member.memberName}"></td>
  </tr>
</table>
</body>
</html>

그리고 index페이지에 이곳으로 이동 할 태그를 추가하겠습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
    <h1> Index Page!</h1>
    <a href="/member/save">회원가입</a>
    <a href="/member/login">로그인</a>
    <a href="/member/">회원목록</a>



</body>

 

 

모든 과정을 완료했으니 실행해 보겠습니다.

localhost:8080/
localhost:8080/member

 

 

위와 같이 정상적으로 출력 되었습니다.