인터넷에 한개짜리는 많이 나오는데
여러개를 받아야 하는 경우에 대한 케이스.
한참 디버깅해서 알아냈지만
알고보면 간단하다
솔루션부터… Mybatis Mapper파일
매퍼를 여러개 지정 해 줘야한다. 한곳에서 result가 다 담겨나오지 않네.. 생각해보면 당연한데
<mapper namespace="org.beansugar.api.server.module.common.dao.CommonMainDAO">
<resultMap type="java.util.HashMap" id="pMap">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap0">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap1">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap2">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap3">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap4">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap5">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap6">
</resultMap>
<resultMap type="java.util.HashMap" id="pMap7">
</resultMap>
</mapper>
또 Mybatis Mapper파일이지만 이번엔 프로시저 호출부분
<select id="PID-057" parameterType="hashmap" statementType="CALLABLE">
{ call MEMBER_001(
#{username,mode=IN,jdbcType=VARCHAR},
#{email,mode=OUT,jdbcType=VARCHAR},
#{joinDate,mode=OUT,jdbcType=VARCHAR},
#{name,mode=OUT,jdbcType=VARCHAR},
#{groupInfo,mode=OUT,jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=pMap0},
#{friendInfo,mode=OUT,jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=pMap1},
#{pointInfo,mode=OUT,jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=pMap2},
#{code,mode=OUT,jdbcType=VARCHAR},
#{message,mode=OUT,jdbcType=VARCHAR}
)
}
</select>
Java – Mybatis 호출 코드
getSqlSessionTemplate().selectOne("procedure-member-001", param);
List<Map<String,Object>> subList0 = (List<Map<String, Object>>)param.get("groupInfo");
subList0내의 결과값은 프로시저에서 지정한 이름으로 나온다. mybatis에서 손대려면 resultMap을 만져주면 될 것 같은데...
그것도 귀찮으니 그냥 코드로 하는게 나을 것같다