728x90
sqlMapper를 작성할 때 #과 $ 기호의 차이점은 아래와 같다.
# : 매개변수로 전달받은 파라메터를 그대로 삽입한다.
ex) 만약 아래와 같이 SQL이 작성되어 있다고 네임 스페이스는 test.select 라고 하자.
select * from MEMBER where name = #{name}
호출시 인자 전달 방법은 아래와 같다.
getSqlSession.selectOne("test.select", "이지형");
$ : key와 value로 이루어진 Map 형태로 전달된다.
select * from MEMBER where name = ${name}
이라고 하면 파라메터 타입을 HashMap으로 넘겨줘야하며
name(key)에 해당하는 값(value) SQL 구문에 넣어주게 된다.
HashMap<String, String) map = new HashMap<String, String>();
map.put("name", "이지형");
getSqlSession.selectOne("test.select", map);
1. #는 쿼리가 수행될 때, 다음과 같이 된다
SELECT * FROM USER WHERE col = ? parameter : [값] |
?에 bind된 값이 들어가게 된다.
이 쿼리의 컴파일 된 내용을 재사용 할 수 있고, 파라미터에 따라 대입해주므로 효율적이다.
내부적으로 preparedStatement 객체에서 ? 에 들어갈 파라미터의 값을 set 해줌으로써 사용이 된다.
* preparedStatement는 한번 수행한 쿼리를 캐싱하는 객체
사용 용도 >>
#일 경우, 값에 사용한다.
myBatis : 컬럼명 = #{값}
iBatis : 컬럼명 = #값#
* 쿼리에 작은 따옴표가 붙게 된다.
2. $는 쿼리가 수행될 때, 다음과 같이 된다
SELECT * FROM USER WHERE col = 값 |
값이 넣어진 쿼리 자체로 수행이 된다.(상수)
즉, 문장 전체가 preparedStatement가 된다.
사용 용도 >>
$일 경우는 컬럼명이 동적으로 바뀌어야 할 때 사용한다. 또는 테이블명.
myBatis : ${컬럼명} = #{값}
iBatis : $컬럼명$ = #{값}
* 쿼리에 작은따옴표가 붙지 않는다.
값에 $를 사용하면 스트링의 경우 작은따옴표로 감싸지지 않기 때문에 에러 발생한다.
이렇게 사용하지 않으면 unknown column 이나 There is no readable property named 등등의 에러가 뜨게 된다
출처 : http://warmz.tistory.com/744
http://marobiana.tistory.com/60
'프로그래밍 > ibatis' 카테고리의 다른 글
iBatis 복수 parameter넘기는법 (0) | 2014.11.18 |
---|---|
Mybatis 기본 사용법 (0) | 2014.10.28 |
[스크랩]resultMap, resultClass, parameterClass (0) | 2014.10.14 |