본문 바로가기
공부/web

[MyBatis] '${필드명}'과 '#{필드명}'

by 밍미 2018. 5. 31.
'${필드명}'과 '#{필드명}'

'${value}'과 '#{value}'

MyBatis에서는 쿼리 내에 ${value}과 #{value}을 사용할 수 있다.

PreparedStatement를 사용하면서 java에서는 파라미터를 ?로 썼었는데, 이게 MyBatis에서는 #{value}으로 대체된다. #{value} parameterType에는 반드시 같은 이름의 변수가 있어야한다. DB에서 데이터를 가져와 select 쿼리로 데이터를 보낼 때는 resultType에서 지정한 클래스 안에 각 필드들에 대한 변수가 모두 있어야 한다. set변수명을 다 일일이 호출해 데이터를 넣어 객체를 만들고, 그 객체를 리스트에 저장해 보낸다.

#{value}이 PreparedStatement와 같이 Mapping이 나중에 이루어지는 반면 ${value}은 Statement와 같이 Mapping이 먼저 이루어진다. 그래서 쿼리를 콘솔창에서 보면 ${value}을 사용했을 때는 물음표(?)가 아니라 실제 값으로 나타난다. #{value}을 사용한 것은 콘솔창에서는 ?로 보이고 나중에 실제 값과 결합되어서 실행된다.

데이터 타입에 따라 #{value}은 자동으로 따옴표('')를 붙여주지만(내가 붙이고 말고를 제어할 수 없다.) ${value}은 그냥 그 위치에 문자열을 내보낼 뿐이라서 따옴표가 필요하면 직접 앞 뒤로 붙여주어야한다.

${value}은 데이터를 문자열으로 주어도 그대로 옮겨놓기 때문에 테이블명이나 필드명이 추가될 때는 ${필드명} 또는 ${테이블명}을 사용한다.


댓글