-
[mybatis]파라미터, 문자열 대체 (#{value}, ${value})DB 2021. 6. 21. 16:18728x90반응형
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반응형'DB' 카테고리의 다른 글
JOIN (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN) (0) 2021.08.20 SQL문을 이용하여 데이터 가져오기 -1 (0) 2021.06.05 DBMS(DataBase Management System) (0) 2021.06.04 데이터 베이스 (0) 2021.06.04 [SQL] FOREIGN KEY 제약 조건 (1) 2020.11.30