반응형

스프링(Spring)에서 톰캣 WAS를 실행할 때, 간혹가다가 Could not find SQL statement to include with refid 'TEST'라는 에러 메시지를 발견하곤 한다. 이 문제의 원인은 우리가 xml에서 refid를 사용하는 경우가 있는데, 거의 대부분의 문제는 xml에서 선언하는 위치에 따라 문제가 발생한다.


목차

1. 원인 및 해결방법

1. 원인 및 해결방법

우리가 xml에서 IBatis나 MyBatis를 사용한다고 가정을 하고, refid 쿼리를 아래와 같이 사용한다.

<select id="TEST01_LIST" parameterClass="Map" resultClass="StringMap">
	<include refid="TEST01_SELECT" />
	WHERE 1 = 1
	<include refid="TEST01_WHERE" />
	ORDER BY 1
</select>

 

위와 같이 refid를 사용하면 따로 <sql> 태그를 사용하여 refid에 해당하는 쿼리를 작성해야 한다.

 

<sql id="TEST01_SELECT">
	SELECT NAME
         , ID
      FROM TEST
</sql>


<sql id="TEST01_WHERE">
	AND NAME = #{NAME}
</sql>

 

이렇게 작성하는 경우에는 에러가 발생한다.

작성 방법은 정확하다. 근데, 톰캣 WAS를 구동할 때, XML은 위에서부터 읽어 내려오기 때문에 맨 위에서의 TEST01_LIST라는 <SELECT> 태그 위에 TEST01_SELECT와 TEST01_WHERE SQL 태그를 먼저 선언해야 SELECT 태그를 읽어올 수 있다.

 

즉, 아래와 같이 순서를 바꿔야 한다.

<sql id="TEST01_SELECT">
	SELECT NAME
         , ID
      FROM TEST
</sql>


<sql id="TEST01_WHERE">
	AND NAME = #{NAME}
</sql>

<select id="TEST01_LIST" parameterClass="Map" resultClass="StringMap">
	<include refid="TEST01_SELECT" />
	WHERE 1 = 1
	<include refid="TEST01_WHERE" />
	ORDER BY 1
</select>

 

이렇게 순서대로 선언을 해야 TEST01 순서에 TEST01_SELECT와 TEST01_WHERE을 읽어올 수 있고, 문제를 해결할 수 있다.


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기