myBatis 파라미터 바인딩시 주의점 myBatis(ibatis)
- 2010/09/17 17:08
- preludeb.egloos.com/4466584
- 덧글수 : 4
출처: 프렐루드의 잡담방
매핑구문에 파라미터를 전달할때 값 기반으로 전달한 파라미터를 사용하면 아무런 문제 없이 처리된다.
String parameterName = "value";
session.selectList("com.test.mapper.TestSql", parameterName)
이렇게 파라미터를 주고
<select id="TestSql" parameterType="String" resultType="com.test.mapping.Account">
SELECT *
FROM Account
WHERE AccountName = #{parameterName}
</select>
이렇게 매퍼를 사용하면 정상적으로 처리된다. 하지만 $를 이용해 바인딩하는 경우에는 에러가 발생한다.
<select id="TestSql" parameterType="String" resultType="com.test.mapping.Account">
SELECT *
FROM Account
WHERE ${parameterName} = '가나다'
</select>
이렇게 하면 속성을 찾을 수 없다면서 오류가 발생한다. 이러한 경우에는 문자열로 바로 파라미터를 전달하지 않고 map에 넣어서 전달한다.
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("parameterName", "value");
session.selectList("com.test.mapper.TestSql", parameterName)
이렇게 파라미터를 전달하면
<select id="TestSql" parameterType="String" resultType="com.test.mapping.Account">
SELECT *
FROM Account
WHERE ${parameterName} = '가나다'
</select>
이러한 구문도 정상적으로 처리된다. #로 파라미터를 바인딩 할때와 $로 파라미터를 바인딩 할때 구조상에 차이가 있는가 보다.
'개발 > Mybatis' 카테고리의 다른 글
mybatis 동적쿼리 조건문에 isEmpty, isNotEmpty 를 써보자. (0) | 2013.09.11 |
---|