본문 바로가기

dev/java(egov)

[mybatis] Element type "selectkey" must be declared

반응형
mybatis Element type "selectkey" must be declared

 

원인

  • DTD 설정 오류: MyBatis 매퍼 XML 파일의 DOCTYPE 선언 부분이 잘못되었거나 누락된 경우.
  • MyBatis 버전 호환성 문제: MyBatis 버전과 사용 중인 DTD가 호환되지 않는 경우.
조치 1
  • MyBatis 매퍼 XML 파일의 최상단에 올바른 DOCTYPE 선언이 포함되어 있는지 확인해야 합니다. 다음은 MyBatis 3.x 버전에서 사용하는 올바른 DOCTYPE 선언입니다:
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

조치 2
  • 전자정부프레임워크 SAMPLE 테이블을 예제로 진행했습니다.
<mapper namespace="egovframework.example.sample.service.impl.SampleMapper">

	<resultMap id="sample" type="egovframework.example.sample.service.SampleVO">
		<result property="id" column="id"/>
		<result property="name" column="name"/>
		<result property="description" column="description"/>
		<result property="useYn" column="use_yn"/>
		<result property="regUser" column="reg_user"/>
	</resultMap>

    <insert id="insertSample" parameterType="SampleVO">

        <selectKey keyProperty="id" resultType="string" order="BEFORE">
            <![CDATA[
            SELECT 'SAMPLE-' || LPAD(NVL(MAX(TO_NUMBER(SUBSTR(id, 8))), 0) + 1, 5, '0') AS id
            FROM SAMPLE
            ]]>
        </selectKey>

        INSERT INTO SAMPLE
            ( ID
              , NAME
              , DESCRIPTION
              , USE_YN
              , REG_USER )
        VALUES ( #{id}
              , #{name}
              , #{description}
              , #{useYn}
              , #{regUser} )

    </insert>
    
</mapper>

 

반응형