Map<String, Object> lstParam = new HashMap<String, Object>();

Map<String, Object> mapParam;
List<Map<String, Object>> dsBuildList;
List<Map<String, Object>> dsObjList;
List<Map<String, Object>> dsBuildMrtggList;
List<Map<String, Object>> dsPldgList;
List<Map<String, Object>> dsClauseList;
List<Map<String, Object>> dsLoanList;

lstParam.put("mapParam",mapParam);
lstParam.put("dsBuildList",dsBuildList);
lstParam.put("dsObjList",dsObjList);
lstParam.put("dsBuildMrtggList",dsBuildMrtggList);
lstParam.put("dsPldgList",dsPldgList);
lstParam.put("dsClauseList",dsClauseList);
lstParam.put("dsLoanList",dsLoanList);

일반적으로 Mybatis에 Parameter를 넣을 때, 보통 Map<String, Object>, List<Map<String, Object>>와 같은 형태로 집어 넣은 상태를 많이 봤었다.

복수의 List와 Map이 섞인 형태의 Parameter가 필요한 경우가 생길 수 있다.

한 번 Database를 건드릴 때, 일반적으로 하나의 테이블을 각각 Dao를 통해서 건드리게 되는 것이 일반적이지만 insert 도중, 에러가 발생하면 전체 롤백이 필요할 수 있기 때문이다.

다른 방법도 있겠지만 일단 앞에서 개발한 사람 것에 맞추는 것이 일반적이니까...

일단 Object가 최상위 Class 형태니까 위와 같이 하면 List든 Map이든 다 들어간다.

	<insert id="savePreLink" parameterType="java.util.Map">
             DECLARE
                 v_frid	         VARCHAR2(10);  -- 등록자
                 v_chng_val 	 VARCHAR2(10); -- 변경구분						
             BEGIN		    
                 v_frid	         := #{mapParam.FRID};
                 v_chng_val		 := #{mapParam.CHNG_TYPE};
                 
		    BEGIN
                        <foreach item="item" index="key" collection="dsBuildMrtggList" separator="">
                        v_row_03 := v_row_03 + 1;
                        INSERT INTO IF_BEN_HYU_CALC_SECT
                        (
                          SECTCD_NO
                        , SECTCD
                        , SECTMODYN
                        )
                        VALUES
                        (
                          v_row_03
                        , CASE 
                           WHEN #{item.MRTGG_CD} = 'T405' THEN '12'
                           WHEN #{item.MRTGG_CD} = 'U989' THEN '01'
                           WHEN #{item.MRTGG_CD} = 'W990' THEN '01'
                           WHEN #{item.MRTGG_CD} = 'T152' THEN '05'
                           WHEN #{item.MRTGG_CD} = 'T050' THEN '12'
                          END
                        , #{item.NOW_ROWTYPE}
                        );
                        </foreach>
		    END;
            
  ....
		    COMMIT;
		
		    EXCEPTION 
		        WHEN OTHERS THEN
		        	ROLLBACK;
		            RAISE_APPLICATION_ERROR(-20000, 'ERROR - '|| v_step);
		
		END;

	</insert>

코드를 다 올려선 안되기에 일부 삭제가 되었지만 위와 같이 Map에서 Map을 꺼내거나 foreach를 이용하여 List를 사용하는 식으로 사용할 수 있다.

처음엔 이런 내용이 검색해도 안보여서 뭔가 했는데 사실 이렇게 쓰면 안좋아서 쓰는 사람이 없어서 관련 내용이 없었던 것 같다.

+ Recent posts