코북
Keep going
코북
전체 방문자
오늘
어제
  • 분류 전체보기 (114)
    • Computer Science (20)
      • 인터넷 (10)
      • 운영체제 및 일반지식 (4)
      • 공통 요구사항 (4)
      • WAS (2)
    • DataBase (18)
    • JavaScript (22)
    • Spring (15)
    • Java (4)
    • ASP.NET (5)
    • C# (6)
    • 알고리즘 (8)
    • HTML5 + CSS (5)
    • Git & GitHub (5)
    • Machine Learning (5)
    • 좋은 글 공유 (1)

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
코북

Keep going

[Spring] @Param 어노테이션으로 mapping하기
Spring

[Spring] @Param 어노테이션으로 mapping하기

2021. 11. 2. 17:45

 안녕하세요 코북입니다. 차트 만드는데 계속 이런 오류가 발생했습니다. '이용 가능한 변수들이 4개가 있는데 그중에서 "mb_id"라는 변수를 찾을 수 없다.'라는 내용입니다. Mapper Interface에서 실행한 메소드가 xml에서 변수들을 찾아가지 못해서 발생한 오류인데요. @Param 어노테이션을 사용하여 mapping 할 변수의 이름을 명시해 주었더니 오류가 해결됐습니다.

 mapping이란 하나의 값을 다른 값으로 대응시키는 것을 말합니다.

 

■ Mapper Interface

public int countSum(GraphVO vo, int num1) throws Exception;

 

■ Mapper.xml

<select id="countSum" resultType="int">
  select sum(pos_count) as pos_sum 
  from POSTURE 
  where mb_id=#{mb_id} and pos_type=#{pos_type}
  and pos_time between DATE_SUB(NOW(), INTERVAL #{num1}+7 DAY) and DATE_SUB(NOW(), INTERVAL #{num1} DAY) 
  order by pos_time;
</select>

 기존에 존재하던 Mapper Interface와 XML파일의 코드입니다. 메소드로 vo라는 변수와 num1이라는 변수를 보내주는데, Mapper.xml은 mb_id값에 vo를 mapping 해야 하는지 num1을 mapping 해야 하는지 알 수가 없습니다. 이때 @Param 어노테이션을 사용해 mapping 할 변수의 이름을 명시해 주면 mapper.xml은 Mapper Interface에서 넘어오는 변수들을 이름에 맞게 mapping 할 수 있게 됩니다. 

 

 

■ Mapper Interface 수정

import org.apache.ibatis.annotations.Param;
public int countSum(@Param("vo")GraphVO vo, @Param("num1")int num1) throws Exception;

 

■ Mapper.xml 수정

<select id="countSum" resultType="int">
  select sum(pos_count) as pos_sum 
  from POSTURE 
  where mb_id=#{vo.mb_id} and pos_type=#{vo.pos_type}
  and pos_time between DATE_SUB(NOW(), INTERVAL #{num1}+7 DAY) and DATE_SUB(NOW(), INTERVAL #{num1} DAY) 
  order by pos_time;
</select>

 이렇게 변수 앞에 @Param 어노테이션을 추가하고 괄호() 안에 변수 이름을 명시해주면 Mapper.xml은 넘어오는 변수들이 무엇인지 알 수 있게 됩니다. GraphVO vo를 vo라고 해줬고 int num1은 num1이라고 해줬습니다. xml파일에서 mb_id와 pos_type 변수의 경우 vo에서 꺼내오는 변수들이기 때문에 'vo.' 을 변수 앞에 적어줍니다.

 

배운 점

 Mapper Interface에서 두 개 이상의 변수를 사용하면서 Mapper Interface와 Mapper.xml이 연결되는 원리에 대해 다시 한 번 생각할 수 있는 시간이었습니다. namespace를 맞춰서 연결해준 것처럼 변수 명도 @Param을 통해 연결시켜 주어야 한다는 것을 배웠습니다.

 

 

 

 

본 글은 아래 링크의 내용을 참고하여 학습한 내용을 나름대로 정리한 글임을 밝힙니다.

https://memories95.tistory.com/118

https://programmerhoiit.tistory.com/57

'Spring' 카테고리의 다른 글

[Spring/Ajax] Chart.js로 차트 만들기 2  (0) 2021.11.02
[Spring] 회원 정보 수정하기  (0) 2021.11.02
[Spring/Ajax] Chart.js로 차트 만들기  (0) 2021.10.30
[Spring] 카카오 로그인 Open API  (0) 2021.10.26
[Spring] 회원가입 기능  (0) 2021.10.25
    'Spring' 카테고리의 다른 글
    • [Spring/Ajax] Chart.js로 차트 만들기 2
    • [Spring] 회원 정보 수정하기
    • [Spring/Ajax] Chart.js로 차트 만들기
    • [Spring] 카카오 로그인 Open API
    코북
    코북

    티스토리툴바