insert 질문입니다. 0 2 1,494

by stylebox [SQL Query] [2015.05.19 16:56:10]


현재 검색을 하면 해당데이타가 

리스트로 뿌려지구요.

각 row 마다 체크박스가 있어서 원하는 row를 체크해서 등록을 하는 방식입니다.

이번에 추가로 전체선택이 있는데 

1개만 조회될수도 있구 많게는 천개넘게 조회가 되는데

현재 프로그래한거는 for문으로 하나의 값으로 delete후 insert를 하고 있어요.

체크된값이 많은경우 이방법으로 문제가 될수가 있을꺼 같아서 

검색을 해봤는데 

<insert id="tableMultiInsert" parameterClass="java.util.List">
    INSERT ALL
        <dynamic>
    <iterate conjunction=" "  >
        INTO t (pid, fname, lname)
        VALUES (#[].pid#, #[].fname#, #[].lname#)
    </iterate>
    </dynamic>
    SELECT * FROM dual
</insert>
 
위와같은 방식이 있더라구요.
어떤 방법이 더 좋을지 판단이 안되는데 
조언좀 부탁드리며 더 좋은방법이 있는지 궁금하네요.

 

by 아발란체 [2015.05.19 17:12:52]

올려주신 방법도 괜찮고요, PrepareStatment 방식으로 입력하는 방법도 있습니다 ~ :)


by 비주류 [2015.05.19 23:26:07]

화면에서 선택할 수 있는 수준이라면 건건 insert도 큰 문제는 없을 것 같고요...

일시에 동일한 형태로 많은(수만 이상?) 데이터가 insert가 된다면 batch 모드로 처리하는 것도 고려해보세요.

올려주신 방법으로 하면... 많은 값이 들어오면 그만큼 SQL도 길어지고 다른 부작용이 있을 것 같네요.

MyBatis에서 batch 적용하는 것 관련해선 SqlSessionFactory.openSession(ExecutorType.BATCH); 등의 키워드로 찾아보시면 될 것 같습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입