MyBatis에서 inner class 사용방법이 궁금합니다
조회수 10388회
<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 답변
-
가능합니다.
다만 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
댓글 입력