본문 바로가기

개발/Mybatis

myBatis 파라미터 바인딩시 주의점

myBatis 파라미터 바인딩시 주의점 myBatis(ibatis)

출처: 프렐루드의 잡담방

매핑구문에 파라미터를 전달할때 값 기반으로 전달한 파라미터를 사용하면 아무런 문제 없이 처리된다.

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>


이러한 구문도 정상적으로 처리된다. #로 파라미터를 바인딩 할때와 $로 파라미터를 바인딩 할때 구조상에 차이가 있는가 보다.