본문으로 바로가기

Spring + MyBatis로 API 만들어 보기(2)

category Spring/API 2018. 1. 19. 12:53


저번 시간에는 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. 쿼리 작성

selectUser
1
2
3
SELECT user_id, login_id, `name`
FROM `user`
WHERE user_id = 2

SELECT 무엇을? user_id와 login_id, name을 가져옵니다. (password는 뺐습니다. 비밀번호를 가져오진 않잖아요? 보통...?)

FROM 어디서? `user` user 테이블에서! (``는 저번 시간에 말했습니다. 기억이 안난다면 다시 보고 오세요.)

WHERE 조건은? user_id가 2인 것만!

잘 나옵니다. 이제 스프링으로 들어가봅시다.

1. Controller (UserApiController.java)


UserApiController
1
2
3
4
5
@RequestMapping(value = "/users/{userId}", method = RequestMethod.GET)
public @ResponseBody
User selectUser(@PathVariable Integer userId) {
    return userService.selectUser(userId);
}

→ @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)


UserService
1
2
3
public User selectUser(Integer userId) {
    return userMapper.selectUser(userId);
}

→ 전달받은 userId를 OO쪽으로 넘겨줍니다. 끝.

OO은 어디?


3-1. Mapper (UserMapper.java)


UserMapper
1
User selectUser(Integer userId);

→ userId를 받았습니다. 요놈의 역할은?


3-2. Mapper (UserMapper.xml)


UserMapper.xml
1
2
3
4
5
<select id="selectUser" resultMap="UserMap">
    select user_id, login_id, `name`
    FROM `user`
    WHERE user_id = #{userId}
</select>


→ 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