ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [mybatis]파라미터, 문자열 대체 (#{value}, ${value})
    DB 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
    반응형

    '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

    댓글

Designed by Tistory.