지난 포스팅(회원 가입, 회원 등록)에 이어
회원 조회와 전체 회원 조회를 해보고자 한다.
https://healthdevelop.tistory.com/entry/spring19
기존 코드(Service, Repository, Domain 등)는 아래 링크에서
순차적으로 볼 수 있다
https://healthdevelop.tistory.com/entry/spring12
1. MemberController 작성
MemberController.java
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 MemberService memberService;
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm(){
return "members/createMemberForm";
}
@PostMapping("/members/new")
public String create(MemberForm form){
// post로 넘어온 input 데이터(name)는 매개변수로 입력한 MemberForm에 있는 name에 자동으로 setName이 됨
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";
}
}
이전 포스팅에서 작성한 MemberController에서
제일 하단에 public String list <- 이 메서드만 추가된 것이다.
클라이언트로부터 "/members" 화면 요청이 오면
스프링 컨테이너 안에 있는 컨트롤러에서 관련 컨트롤러가 있는지 찾는다.
만약 "/members" url로 요청이 왔으면
memberService의 기능 findMembers를 통해
전체 회원을 List인 members에 담는다.
그리고 매개변수로 작성한 model에 addAttribute를 통해
members란 속성에 우리가 조회한 전체 회원 members의 값을 넣는다.
반환 값으로 "members/memberList"을 주었으니
개발자는 members/memberList.html을 작성해야 한다.
그러면 클라이언트가 "/members" 화면 요청 시
members/memberList.html을 볼 수 있는 것이다.
2. memberList.html 작성
memberList.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<table>
<thead>
<tr>
<th>#</th>
<th>이름</th>
</tr>
</thead>
<tbody>
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>
일반 html과 거의 동일하지만
14 ~ 17줄에 타임리프(thymeleaf) 문법이 쓰였다.
<tr th:each="member : ${members}">
- 이전 코드 controller에서
model에 members라는 속성명에 전체 회원정보를 담았다.
th:each 를 통해 반복문을 수행하는데
member는 members안에 있는 members의 첫 번째 요소를 말한다.
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
- members의 첫번째요소 member의 id와 name을 가져온다.
반복문은 members의 루프가 끝날 때까지(모든 회원이 조회될 때까지) 반복된다.
그럼 이제 클라이언트가 각기 다른 이름을 입력 후 등록을 한 다음
회원 조회 url을 요청해보자
두 개의 이름을 등록하고 전체 조회 url을 요청하면..
입력한 이름들이 조회가 되었다..!
하지만 우리는 치명적 단점을 가지고 있다.
단순히 PC 메모리 repository에 회원들을 저장하다 보니
서버를 내렸다가 다시 올리거나, pc를 껐다가 켜면
기존에 등록했던 회원 정보는 초기화된다.
이러한 문제를 방지하고자 DB 연결을 통해
데이터를 보존해야 한다.
다음 포스팅에선 h2 데이터베이스를 설치하고자 한다.
'Java > Spring' 카테고리의 다른 글
[Spring] 스프링 통합 테스트 | DB(데이터베이스) 연동하기 | 회원 가입, 회원 조회, 중복 회원 예외 (0) | 2022.01.10 |
---|---|
[Spring] DB(데이터베이스) 연동하기 | 순수 JDBC | 회원 가입, 회원 조회 (0) | 2022.01.10 |
[Spring boot] 스프링 회원 가입(회원 등록) 예제 | 타임리프(Thymeleaf) (0) | 2022.01.07 |
[Spring boot] 스프링 홈 화면 | 메인 화면 | 메인 페이지 | 타임리프(Thymeleaf) (0) | 2022.01.07 |
[Spring boot] 스프링 빈과 의존관계 | 자바 코드로 직접 스프링 빈 등록하기 | @Controller | @Autowired | 컨트롤러 작성(화면에 띄우기) (0) | 2022.01.06 |