[Spring] DTO 여러개를 Mybatis(Oracle)로 한꺼번에 Insert하기

dsunni·2020년 7월 10일
0

Spring Framework + Oracle Mybatis

Hashtag라는 단일 테이블에 아래와 같은 값들을 한꺼번에 넣어보자.

HASH_NOAC_NOHASH_VAL
115#브라이덜샤워
215#홍대파티룸
315#빔프로젝터

1. List에 DTO 추가

for (int i = 0; i < paramMap.get("hashtag").size(); i++) {
    HashtagDto dto = new HashtagDto();
    String hashtag = paramMap.get("hashtag").get(i);
    System.out.println("hashstag in dtoList = " + hashtag);

    dto.setAc_no(ac_no);
    dto.setHash_val(hashtag);

    dtoList.add(dto);
}

HashTagDTo에 param으로 넘겨온 값들을 하나하나씩 넣어줘서 넘기자



2. Mapper 수정

1. INSERT ALL 사용

<insert id="insertHashtag" parameterType="java.util.Map">
    <foreach collection="list" item="item" index="index" separator=" " open="INSERT ALL" close="SELECT * FROM DUAL">
        INTO HASHTAG  ( 
        HASH_NO                     
        , AC_NO
        , HASH_VAL                
        ) VALUES(
        #{item.hash_no}                    
        , #{item.ac_no}                         
        , #{item.hash_val}
        )
    </foreach>  
</insert>
  • 값이 한꺼번에 들어가는건 확인했다.
  • 문제는 HASH_NO의 SEQUENCE가 적용이안된다

sequence까지 적용한 Mapper

<insert id="insertHashtag" parameterType="java.util.Map">
    INSERT into HASHTAG(HASH_NO,AC_NO,HASH_VAL)
    SELECT seq_hash.NEXTVAL, A.* FROM(
    <foreach item="item" collection="list" separator="UNION ALL " >
        select #{item.ac_no} as AC_NO,
        #{item.hash_val} as HASH_VAL
        from dual
    </foreach>) A
</insert>
  • 한번에 insert all + sequence.nextval까지 잘 들어가는 것을 확인할 수 있다.

profile
https://dsunni.tistory.com/ 이사갑니답

0개의 댓글