반응형

메이븐 프로젝트 코딩을 하던 중

 

여러개의 변수를 Map 에 담아

Mybatis Sqlmapper 를 이용하여

쿼리를 날려야 하는 작업이 있었습니다.

 

맵에 담긴 여러 변수 중

일부는 테이블 이름 혹은 컬럼 이름으로 매핑되고

일부는 WHERE 조건절 등의 변수로 사용해야하는데

일반적으로 사용하는 #{변수명} 으로 파라미터를 받아왔더니

 

Bad SQL 에러가 뜨는 것이었습니다.

 

한참을 헤메고 고민하다가 결국 선임개발자에게 질문을 했는데

너무나 명쾌하게 고민을 해결해주셔서

혹시나 같은 고민을 하시는 분들이 계실까봐

이렇게 포스팅을 하게 되었습니다.

 

Dao 에서 전달한 파라미터를

sqlmapper에서 받아오는 방법은

크게

${변수명}

#{변수명}

으로 나뉩니다.

 

$ 은 한마디로 말하면 상수값

즉 쿼리를 날릴 때 ' ' 에 들어가지 않는 값이고

# 은 변수값 즉 ' ' 안에 들어가는 값을 받아와서 자동으로 매핑시켜 줍니다.

 

예를 들어 보겠습니다.

 

PEOPLE

NAME AGE ADDRESS PHONE
홍길동 402 조선 019-123-4567
지엔키 99 비밀 010-1234-5678
아이유 27 서울 010-8765-4321

이런 테이블이 있을 때

 

이름이 '지엔키' 인 사람의 주소를 가져오려면

 

SELECT ADDRESS FROM PEOPLE WHERE NAME='지엔키';

 

가 되겠죠?

 

이 때

 

SQLMapper 에

 

SELECT ${columnName} FROM PEOPLE WHERE NAME=#{name}

 

이렇게 설정 을 해주면

sqlmapper 가 자동으로

$ 가 붙은 컬럼이름, 즉 상수에는 ' ' 를 붙이지 않고

# 가 붙은 변수 에는 ' ' 를 붙여 쿼리를 날리게 된다는 겁니다.

 

굉장히 간단하지만 꼭 필요한 걸

이제라도 알게되어서

혹시나 필요한 분들에게 도움이 되셨기를 바랍니다.

반응형

+ Recent posts