[마이바티스] mybatis # $ 사용법
#{}, ${} 표현식은 MyBatis에서 매개변수를 지정하고 동적 SQL을 작성하는 데 사용됩니다. #{}, ${}의 의미와 사용 방법을 이해하여 데이터베이스와의 상호작용을 보다 효율적으로 구현할 수 있습니다.
mybatis mapper.xml 작성법이 궁금하다면?
mybatis select 태그에 대해 궁금하다면?
#와 $의 차이점
MyBatis에서는 #{}과 ${} 두 가지 표현식을 사용하여 매개변수를 지정할 수 있습니다.
1. #{} 표현식은 JDBC의 PreparedStatement를 사용하여 매개변수를 처리합니다.
이 표현식을 사용하면 입력 값에 대한 자동적인 타입 변환과 SQL 인젝션 방지 기능을 제공합니다. 따라서 #{}은 일반적으로 매개변수를 지정할 때 사용하는 권장된 방법입니다.
2. ${} 표현식은 입력된 값을 그대로 쿼리에 삽입합니다.
이 표현식은 단순한 문자열 치환을 수행하며, 자동적인 타입 변환이나 SQL 인젝션 방지 기능을 제공하지 않습니다. ${}은 주로 동적인 SQL을 작성할 때 사용됩니다.
#{} 와 ${} 사용방법과 차이점
<select id="selectUserById" parameterType="int" resultType="com.example.User">
SELECT * FROM users WHERE id = #{userId}
</select>
#{userId}는 int 타입의 userId 매개변수를 나타냅니다. 이 경우 #{} 표현식이 사용되었으므로 MyBatis는 입력된 userId 값을 자동으로 PreparedStatement로 처리하며, 값의 타입 변환과 SQL 인젝션 방지를 수행합니다.
<select id="selectUserByName" parameterType="String" resultType="com.example.User">
SELECT * FROM users WHERE name = '${username}'
</select>
${username}은 String 타입의 username 매개변수를 나타냅니다. ${} 표현식이 사용되었으므로 MyBatis는 입력된 username 값을 그대로 쿼리에 삽입합니다. 이 경우에는 타입 변환이나 SQL 인젝션 방지가 수행되지 않으므로, 주의하여 사용해야 합니다.
#{} 와 ${} 표현식을 활용한 동적 SQL 작성방법
$ 표현식 동적 SQL 작성법
${} 표현식은 동적인 SQL을 작성할 때 유용합니다. 예를 들어, WHERE 절에 선택적인 조건을 추가하고자 할 때 다음과 같이 사용할 수 있습니다.
<select id="selectUsersByCondition" parameterType="com.example.User" resultType="com.example.User">
SELECT * FROM users
WHERE 1=1
<if test="name != null">
AND name = '${name}'
</if>
<if test="age != null">
AND age = ${age}
</if>
</select>
# 표현식 동적 SQL 작성법
#{} 표현식은 매개변수를 처리할 때 사용되는 권장된 방법입니다. 이 표현식은 자동으로 값에 대한 타입 변환을 수행하고, SQL 인젝션을 방지하는 안전한 방식으로 매개변수를 처리합니다. #{}은 주로 매개변수를 지정하거나 동적인 SQL에서 조건을 포함하는 데 사용됩니다.
<insert id="insertUser" parameterType="com.example.User">
INSERT INTO users (id, username, age) VALUES (#{id}, #{username}, #{age})
</insert>
위의 예제에서 #{id}, #{username}, #{age}는 com.example.User 객체의 속성을 나타냅니다. #{} 표현식을 사용하면 MyBatis는 자동으로 객체의 속성과 매개변수 값을 매핑하며, 필요한 경우 타입 변환을 수행합니다.
${} 표현식은 단순한 문자열 치환을 수행하는데 사용됩니다. 입력된 값을 그대로 쿼리에 삽입하므로 주의해야 합니다. ${}은 동적인 SQL을 작성할 때 유용하지만, SQL 인젝션에 취약할 수 있으므로 외부 입력값을 사용할 때는 신중하게 사용해야 합니다.
아래 예제에서 ${}의 사용 방법을 보여드리겠습니다:
<select id="selectUsersByAgeRange" parameterType="com.example.AgeRange" resultType="com.example.User">
SELECT * FROM users
WHERE age >= ${minAge} AND age <= ${maxAge}
</select>
${minAge}와 ${maxAge}는 com.example.AgeRange 객체의 속성을 나타냅니다. ${} 표현식을 사용하면 객체의 속성 값을 그대로 쿼리에 삽입합니다. 따라서 타입 변환이나 SQL 인젝션 방지 기능은 제공되지 않으므로, 외부 입력값을 사용할 때는 주의해야 합니다.
#{}과 ${} 표현식은 각각의 사용 목적에 따라 선택적으로 사용해야 합니다. #{}은 매개변수를 처리할 때 안전하게 사용되며, ${}은 단순한 문자열 치환을 수행할 때 유용합니다.
'DB > Mybatis' 카테고리의 다른 글
ibatis mybatis 차이점 총정리! (0) | 2023.05.16 |
---|---|
mybatis select 태그 정리 (0) | 2023.05.15 |
[MyBatis] mapper.xml 작성법 알아보기 (0) | 2020.12.04 |
[MyBatis] MyBatis 환경설정 세팅 (0) | 2020.12.01 |
댓글