반응형
마이바티스에서 이러한 문제가 일어날때가 종종 있다. 분명 문법상 문제가 없어 보이는데 왜 이게 나오니... 라는 생각이 들때 확인을 해보자!
해결방안
1. ' (따음표)와 #,$의 문장을 확인해보자!
이것은 문법오류로 봐야 한다!
<문제점>
<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
SELECT * FROM TABLENAME
WHERE COLUMN1 = '#{column1}'
AND COLUMN2 = '#{column2}'
</select>
이때는 아래와 같이 따옴표 없이 작성하거나, #을 $로 변경해주어야 한다.
<해결>
<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
SELECT * FROM TABLENAME
WHERE COLUMN1 = #{column1}
AND COLUMN2 = #{column2}
</select>
또는
<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
SELECT * FROM TABLENAME
WHERE COLUMN1 = '%${column1}%'
AND COLUMN2 = '%${column2}%'
</select>
2. 주석이 되어있는 문구가 있는지 확인해보자!
<문제점>
<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
SELECT * FROM TABLENAME
WHERE COLUMN1 = #{column1}
-- AND COLUMN2 = #{column2}
</select>
아래와 같이 주석을 삭제하고 실행!
<해결>
<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
SELECT * FROM TABLENAME
WHERE COLUMN1 = #{column1}
</select>
이것으로 해결되지 않는다면, 파라미터에서 넘어오는것이 매핑이 다 되었는지 즉, 파라미터에 데이터가 잘못들어오거나 더 많은 매핑을 요청했는지 확인을 해봐야한다.
마이바티스 xml로 작성한 쿼리문과 DB쪽 쿼리문을 비교해 parameter를 넣는 작업이 필요하다 (바인딩 작업)
이 바인딩 작업은 #{}의 키워드로 바인딩할 인덱스 개수를 센다. 하지만 이 바인딩할 인덱스의 개수가 맞지 않을때 나오는 에러 문구!
즉! 매핑할 #{}개수가 2개인데 쿼리에서는 1개만 들어가야하니 매핑의 index가 맞지 않음
반응형