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

조회수 9738회
<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 사용이 가능한가요~??

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 클래스를 쓸 때는 구둣점(.) 대신에 $를 써서 표현하시면 됩니다.

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)