저번 시간에는 User의 리스트를 가져오는 API를 만들어 보았습니다.
그럼 유저를 골라보고 싶어지지 않나요?
내가 원하는 놈만 쏙쏙 뽑아보고 싶어지니 오늘은 한 번 원하는 놈을 뽑아보겠습니다.
예) user_id가 2번인 놈을 뽑아주세요!
우리는 잊으면 안됩니다.
DB에서 처리할 수 있는 것은 DB에서 다 처리하고 안되면 그 때 Service에 Logic을 짜야합니다.
→ 그냥 제가 이렇게 합니다.
그러므로 쿼리를 잘 짭시다.
1. DB 훑어보기
→ 자 user_id가 2번인 놈을 가져오려면 어떻게 해야 할까요?
if user_id = 2
then print user_id, login_id, password, name
이런 식으로 진행이 되겠죠?
2. 쿼리 작성
→ SELECT 무엇을? user_id와 login_id, name을 가져옵니다. (password는 뺐습니다. 비밀번호를 가져오진 않잖아요? 보통...?)
FROM 어디서? `user` user 테이블에서! (``는 저번 시간에 말했습니다. 기억이 안난다면 다시 보고 오세요.)
WHERE 조건은? user_id가 2인 것만!
잘 나옵니다. 이제 스프링으로 들어가봅시다.
1. Controller (UserApiController.java)
→ @RequestMapping은 저번 시간에 말했습니다.
→ @ResponseBody 역시 저번 시간에 말했습니다.
근데 한 가지 이상한 점이 보입니다. value... method (GET으로 받아올거죠? GET) 저번에 본건데 뭔가 다른데?....
바로, value = "/users/{userId}" 여기서 {userId} 이놈입니다. 이건 요청 url에서 user의 id값을 파라미터로 넘기겠다... 정도로 이해하고 넘어가시면 됩니다.
아냐 더 쉽게 그냥 보기를 원하는 user의 id값을 여기서 지정해준다고 생각하면 됩니다.
그럼 이 값은 어디서 받냐?
@PathVariable 이 어노테이션은 @RequesMapping의 value url에서 아까 말한 {userId} 이 놈에게 값을 받아주는역할을 합니다. (user_id값이 정수형이니 Integer로 선언해야겠죠?)
→ url에서 파라미터를 유지시켜주는데에 보통 쓰입니다. 지금은 그냥 그렇구나 하고 넘어갑시다.
*주의 - userId → 변수명 맞춰주셔야 합니다. 변경을 원하시면 다 같이!
어노테이션의 설명은 여기까지 하고, 우리는 원하는 모습이 User모델에서 설정한 대로(userId, loginId, password, name) → 요 형태로 나오길 원하므로
User(리턴형태) selectUser(이름)으로 했습니다.
정리하자면, ~~~/users/2 → (2는 {userId}) 라고 url이 넘어오면 selectUser
자 다음은 어디로 넘어가야하죠?
2. Service (UserService.java)
→ 전달받은 userId를 OO쪽으로 넘겨줍니다. 끝.
OO은 어디?
3-1. Mapper (UserMapper.java)
→ userId를 받았습니다. 요놈의 역할은?
3-2. Mapper (UserMapper.xml)
→ id부분의 selectUser는 UserMapper.java의 메소드명과 일치합니다.
resultMap은 저번시간에 말했죠!
안에는 처음에 작성한 쿼리문이 돌아갈겁니다.
그런데, 여기서 또 이상한 놈이 있습니다.
바로 WHERE절에 user_id = #{userId} 이 놈!
이 놈은 MyBatis문법으로, 쿼리에 파라미터 값을 넣을 때 사용됩니다.
여기선 컨트롤러의 value url에 있는 userId의 값인 2가 넘어오겠죠? (요청이 2였으니..)
원하면 3,4,5,.... DB에 user_id값이 담겨 있다면 무사히 잘 가지고 올 것입니다.
4. 결과
Postman에서 봅시다.
1)
→ value의 요청 url입니다. 맨~~~ 끝에 user_id가 2인 놈을 요청하죠?
2)
→ 아까 DB에서 뽑은 놈과 같은지 비교해볼까요?
네, 잘 넘어오네요.
이렇게 해서 우리는 원하는 user놈을 쏙쏙 뽑아올 수 있게 되었습니다!
그런데 만약에 url의 끝에 DB에 없는 번호(user_id)를 주면 어떻게 될까요?
아무것도 안나옵니다.
다음 시간에는 GET으로 값을 받아오는 것을 벗어나서 POST로 user를 DB에 넣어보는 일을 해보겠습니다.
'Spring > API' 카테고리의 다른 글
Spring + MyBatis로 API 생성해보기(4) (0) | 2018.03.05 |
---|---|
Spring + MyBatis로 API 생성해보기(3) (0) | 2018.01.23 |
Spring + MyBatis로 API 만들어 보기(1) (3) | 2018.01.18 |