[Mybatis]마이바티스 에러 invalid comparison: java.util.Arrays$ArrayList and java.lang.String XML 리스트 비교연산자 오류

Dev-O·2024년 9월 5일
1

Setting & Error

목록 보기
6/6
post-thumbnail

왜 mybatis를 안쓰는지 참 이해가 간다.
디버깅이 어려우며, 컴파일 당시에 에러를 잡지 못한다. 그리고 쿼리 돌릴때 예외가 참 많다.

이번에 닥친 오류는

invalid comparison: java.util.Arrays$ArrayList and java.lang.String
XML 리스트 비교연산자 오류

리스트 형태의 파라미터를 !=, == 연산자로 리스트의 공백여부를 비교하려고 했기 때문이다.

다른 글들에서는 파라미터명.size() != 0 으로 하라고 하는데
파라미터명.isEmpty()도 가능하다.
참고로 .equals('') => 이것도 오류는 안나지만, 옳은 비교가 아니다(의미없는 비교). 이유는 리스트 객체와 '' 값을 비교하기 때문. 늘 false를 반환한다.

<select id="selectItems" parameterType="java.util.List">
  SELECT * FROM items
  WHERE item_id NOT IN
  <if idList != null and !idList.isEmpty()>
    <foreach collection="idList" item="id" index="index"  open="(" separator="," close=")">
      #{id}
    </foreach>
  </if>
</select>
<!--혹은 -->
<select id="selectItems" parameterType="java.util.List">
  SELECT * FROM items
  WHERE item_id NOT IN
  <if idList != null and idList.size != 0>
    <foreach collection="idList" item="id" index="index"  open="(" separator="," close=")">
      #{id}
    </foreach>
  </if>
</select>

요약

SQL에서는 != 연산자가 단일 값과의 비교에 사용되며, 리스트와 같은 컬렉션 형태와 비교할 수 없습니다. 따라서, MyBatis에서 리스트 형태의 파라미터를 사용하여 != 조건을 작성하려고 하면 SQL 문법 오류가 발생합니다.

profile
Being Outstanding needs Understanding🚀

0개의 댓글