MyBatis에서 inner class 사용방법이 궁금합니다


<select id="testSql" parameterType="ParameterInfo" resultType="ResultDataInfo">
      SELECT
        col1,
        col2,
        col3
      FROM TEST_TABLE
      WHERE REG_DATE >= date_add(now(), INTERVAL -1 DAY)
            AND co1 = #{col1}
      LIMIT 10
    </select>

저는 보통 이런식으로 resultType 이나 parameterType에 vo를 넘겨서 매핑시키는데요.

마이바티스에서 resultType이나 parameterType에 inner class 사용이 가능한가요~??

  • 2016년 04월 21일에 작성됨
    Software Engineer

조회수 418


1 답변


좋아요
2
싫어요
채택취소하기

가능합니다.

다만 inner class가 static 으로 선언되어야 할 것 같네요.

package namespace.to
public class Outer {
   public static class InnerA {
      //...
   }
   public static class InnerB {
      //...
   }
   //...
}

위와 같다면 다음 처럼 써주시면 됩니다.

<select id="testSql" parameterType="namespace.to.Outer$InnerA" resultType="namespace.to.Outer$InnerB">
<!-- ... -->
</select>

Inner 클래스를 쓸 때는 구둣점(.) 대신에 $를 써서 표현하시면 됩니다.

  • 2016년 04월 21일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 감사합니다! 한가지 더 궁금한게있어요. $의 사용법의 경우는 sql injection의 문제로 잘 사용하지는 않지만 ${변수명} 으로 파라미터를 매핑시킬 때 사용하는 것만 알고 있습니다. inner class와 $의 사용법에 관련하여 마이바티스 문서에서 못찾겠는데 혹시 가이드가 따로 나와있나요? ?    김선우   2016.4.21 23:24     
  • $는 변수를 의미하는 게 아니라, Java의 특성때문입니다. Java에서 프로그래밍할 때에는 Class안에서 InnerClass에 접근할 때, 모두 구두점을 사용하지만, 특정 클래스를 읽어와야 하는 클래스로더에서는 Package namespace는 구두점(.)으로 구분하고, 클래스와 InnerClass의 namespace는 $로 구분합니다.     허대영(Daeyoung Heo)   2016.4.22 00:42     
  • 클래스로더에 대해서 자세히 공부해야겠네요. 감사합니다!    김선우   2016.4.22 10:11     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close