Mybatis 주석 - Mybatis juseog

[MyBatis] java.sql.SQLException: 부적합한 열 인덱스

  • 2022.07.14 10:30
  • :: Dev/Database

Mybatis 주석 - Mybatis juseog

MyBatis로 개발하던 중 얻었던 '부적합한 열 인덱스'(Invalid column index) 오류에 대해 정리해본다.

TL;DR

  1. 변수에 대한 Getter, Setter가 올바르게 생성되었는지 확인
  2. 문자열이라고 따옴표를 사용했던 것은 아닌지 확인
  3. 주석에 변수를 포함한 것은 아닌지 확인

Getter, Setter

Java Bean으로부터 데이터를 가져오거나 반환할 때에는 Getter와 Setter를 이용합니다.

MyBatis가 호출할 Getter 메소드와 Setter 메소드가 존재하는지 확인합니다.

따옴표

보통 SQL에서 문자열을 다룰 때에는 작은 따옴표를 사용합니다.

혹시라도 나도 모르게 아래와 같이 SQL을 작성한 것은 아닌지 확인합니다.

SELECT '${userId}' AS USER_ID
  FROM USER

따옴표 안에 변수를 삽입하는 경우 문자열로 취급되기 때문에 열 인덱스에 문제가 생깁니다.

주석

가장 최근에 겪었던 문제입니다.

SELECT USER_ID
     , USER_PASSWORD
  /* , ${password} AS NEW_PASSWORD */
  FROM USER

위와 같이 주석 안에 변수가 있는 경우 해당 변수 역시 MyBatis가 처리해야 하는 변수로 인식되어 열 인덱스에 문제가 생깁니다.

아마 따옴표와 유사한 원인일 것으로 생각됩니다.

만약 SQL Mapper XML에 주석을 입력해야 하는 경우 <!-- 주석 --> 형태의 주석을 활용합니다.


XML 문서에서는 주석(commet)를 작성할 수 있다. 여기에서는 주석을 작성하는 방법에 대해 설명한다.

주석을 작성하는 방법

XML 문서에서 뭔가 메모를 남기고 싶을 때는 주석을 작성 할 수 있다. 구문은 다음과 같다.

<!-- 주석 -->

주석은 <!--로 시작하여 -->로 끝난다. 그 사이에 주석 내용를 작성한다.

주석은 XML 문서의 어디에든 작성할 수 있다.

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <!-- 필요 재고 확인 -->
    <name>바나나</name>
    <color>노랑</color>
  </food>

  <food>
    <name>사과</name>
    <!-- 녹색 같은 빨강 -->
    <color>빨강</color>
  </food>
</foods>

샘플을 브라우저에 표시 해 보면 아래와 같이 표시된다.

단, XML 선언 이전에 작성할 수 없다. 또한 시작 태그와 종료 태그 안에 작성 할 수 없다. 다음은 XML 선언 이전에 작성을 해보자.

<!-- 식료품 -->
<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>바나나</name>
    <color>빨강</color>
  </food>

  <food>
    <name>사과</name>
    <color>빨강</color>
  </food>
</foods>

샘플을 브라우저에 표시해 보면 아래와 같이 에러가 표시된다.

Mybatis 주석 - Mybatis juseog

그리고 주석 내용에 "--"를 작성 할 수 없습니다.

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <!-- 바나나 -- 한국산 -->
    <name>바나나</name>
    <color>노랑</color>
  </food>

  <food>
    <name>사과</name>
    <color>빨강</color>
  </food>
</foods>

샘플을 브라우저에 표시해 보면 아래와 같이 에러가 표시된다.

--

여기까지 XML 문서에 주석을 작성하는 방법을 설명했다.