DB

[mybatis]파라미터, 문자열 대체 (#{value}, ${value})

인디아나쥰이 2021. 6. 21. 16:18
728x90
반응형

1. 파라미터(Parameter)

 

syntax: #{value}

 

select * from people where name = "홍길동"

일반적으로 sql 을 위와 같이 사용한다.

 

하지만 정해진 sql을 사용하는것 만이 아니라 

그때그때 파라미터를 입력 받아서 변경된 sql을 사용해야할 때가 있다.

 

ex)

select * from people where name = 파라미터

 

이를 위해 mybatis에서는 #{value} 형식의 파라미터 입력을 지원한다.

 

<select id="read" resultType="org.zerock.domain.BoardVO">

select * from cinema_board where bno = #{bno}

</select>

 

더보기

resultType: Mybatis에서 쿼리문 수행후 메서드 반환타입이 String 이나 객체를 반환 할 수 있도록 지정하는 속성.

                       즉, 어떤 타입으로 반환할 것이다. 라고 반환 유형을 정해주는것.

 

파라미터의 한계

 

파라미터는 기본적으로 문자열 형식으로 주입된다.

#{value} 가 홍길동일 경우,

select * from people where name = "홍길동" 으로 들어가며, 자동적으로 따옴표가 붙게 된다.

 

즉, #{value}는 문자열로만 인식되기때문에 그 이상의 처리를 할 수 없다.

만약, 개발자가 단순한 컬럼값이 아닌 컬럼명을 변경하고 싶다면 #{value}로는 해결할 수 없다.

 

ex)

select * from people where name = "홍길동" 

위의 sql 을 사용하고자 했을때,

select * from people where #{name} = #{value}

 

라고 입력을 한다면 sql에서는 select * from people where "name" = "홍길동" 으로 인식하게 된다.

 

즉 파라미터는 값의 주입이라는 용도로 밖에 사용할 수 없다.

 

이것을 해결하기 위한 방안이 문자열 대체 이다.

 

 

 

2. 문자열 대체 (String Substitution)

 

syntax: ${value}

 

문자열 대체는 파라미터 입력과는 비슷하지만 다른 역할을 지닌다.

select * from people ${value} = "홍길동"

${value}는 #{value} 와는 달리 문자열 처리가 되지 않는다.

 

ex) value = name 일 경우

 

select * from people where #{value} = "홍길동"

=>  select * from people where "name" = "홍길동"

 

(문자열 "name"과 "홍길동"을 비교했지만 둘이 같지 않으므로 출력되는 결과 없음)

 

select * from people where ${value} = "홍길동"

=> select * from people where name = "홍길동"

 

(name 컬럼값이 "홍길동"인 모든 자료 출력)

 

 

${value} 문자열 대체 문법은 꼭 컬럼뿐만이 아니라 sql 곳곳에서 사용이 가능하다.

select * from people where ${value} = "홍길동"

select * from people order by ${value}

 

 

 

 

 

참고 : https://sourcestudy.tistory.com/470

 

728x90
반응형