Spring Boot에서 데이터베이스를 접근할 때 많이 사용하는 방법은 Mybatis를 사용하는 방법과 Jpa를 사용하는 방법이 있습니다.
이번 포스팅에서는 Mybatis를 사용하면서 마주하게 되는 #{}와 ${}의 차이를 알아보도록 하겠습니다.
Mybatis 문법
Mybatis는 기본적으로 xml 파일에 쿼리문을 넣어서 사용합니다. 따라서 쿼리의 종류에 따라 xml를 묶어서 사용할 수 있고 Database 쿼리만 따로 관리할 수 있어서 편리한 이점이 있습니다.
다음과 같은 쿼리를 사용해야 한다고 생각해 보겠습니다.
SELECT *
FROM usertbl
WHERE user_id = 'test';
여기서 문자열로 받는 test는 Java 클래스와 연동시켜서 보통 사용하고 값을 넘겨줍니다. 그래서 XML 맵퍼를 사용해서 Mabatis 문법으로 만들면 다음과 같습니다.
<select id="findByUserId" resultType="User">
SELECT *
FROM user
WHERE user_id = #{userId}
</select>
이때 사용하는 문법이 바로 #{} 입니다. 만약 ${}를 사용한다면 어떻게 될까요?
Mybatis 사용시 #{}와 ${}의 차이점
아래는 #{}을 사용한 방법과 ${}를 사용했을 때 넘어가는 쿼리 실행문입니다.
* #{} 사용
SELECT * FROM usertbl WHERE user_id = 'test';
* ${} 사용
SELECT * FROM usertbl WHERE user_id = test;
차이점이 보이시나요? 바로 작은따옴표라 불리는 Single Quotation의 차이입니다. 이 둘의 차이점으로 인해 나타나는 결과는 다릅니다.
동일한 쿼리문에 몇가지를 추가해보도록 하겠습니다.
<select id="findByUserId" resultType="User">
SELECT *
FROM user
WHERE user_id = #{userId}
ORDER BY user_id ${order}
</select>
예를 들어서 ORDER BY 하고 싶은 컬럼이 있고 이를 ASC, DESC와 같이 설정하고 싶다고 가정해 보겠습니다. 이런 경우에 ASC, DESC를 'ASC', 'DESC'와 같이 작은따옴표가 들어갈 경우에는 정상적으로 쿼리가 동작하지 않습니다.
즉 #{}와 같이 사용되는 경우는 String 형태로 값을 넣어주고 따옴표가 자동 삽입됩니다. 반면에 ${}와 같이 사용하면 값이 바로 출력됩니다. 따라서 컬럼명 혹은 예약어를 바로 주입할 때 보통 사용할 수 있습니다.
이번 포스팅에서는 스프링 부트 (Spring Boot)에서 Mybatis를 사용하던 중에 궁금증이 생길 #{}와 ${}의 사용법에 대해서 알아보았습니다. 도움이 되셨으면 합니다. 이상입니다.
'쿤즈 Dev > Spring Boot' 카테고리의 다른 글
[Spring Boot] 간단하게 웹 프로젝트 개발 시작하기 (2) | 2022.02.16 |
---|---|
[Spring Boot] Maven Package 빌드시 Test Skip 방법 (0) | 2022.02.12 |
[Spring Boot] Mybatis 에서 조건문 사용시 null 과 zero size string 구분 방법 (0) | 2021.03.16 |
[Spring Boot] Mybatis 동적쿼리 LIKE 사용 방법 (0) | 2021.03.12 |
[Spring Boot] 정적소스 수정 후 서버 재시작 없이 적용 방법 (0) | 2021.03.09 |
댓글