23424421242
30
2019-04-17 23:55:37
4
275

Mybatis 증분 Update 관련 질문입니다.


안녕하세요 자바 새내기 개발자입니다.

고수분들의 답변을 듣고자 질문드립니다.


저의 질문은 아래와 같습니다.

Mybatis을 사용하여 데이터를 update 하려하는데 건수가 많아 LIMIT 로 잘라서 update를 하려고 합니다.

그래서 만약 update문이 있는 mybatis id가 updateData 라고 한다면 서비스 로직은 아래와 같이 작성하였습니다.


int changeCntSum = 0;    // 업데이트된 데이터의 총 개수
int changCnt = 0;    // 업데이트된 데이터 개수
while (true) {
    changeCnt = updateMapper.updateData(...매개변수..);
    changeCntSum += changeCnt;

    // 업데이트할 데이터의 개수가 없을 때 while문 break
    if (changeCnt == 0) {
        break;
    }
}


위와 같이 작성하였음에 불구하고

changeCnt 값이 첫 update 시만 limit 만큼 변경개수를 리턴하고 그 다음부터 계속 0값만 리턴하고 있습니다.


사정상 두서없이 질문드려 죄송합니다.

자바를 잘 모르는 상황에서 갑자기 프로젝트를 투입하게되어 개념이 많이 부족한 상태에서 개발을 하다보니

터무니없는 질문이 될 수도 있는점 양해 부탁드립니다.


답변 부탁드리겠습니다.

감사합니다.


0
0
  • 답변 4

  • 사는게힘듭니다
    2019-04-18 00:13:58

    update 하려는 행이 많다면

    다중행쿼리를 쓰면돼지않을까요?

    Mybatis 문법중에 특정조건에맞는 다중행 업데이트 문법이 있습니다.

    0
  • 초무쿤
    2k
    2019-04-18 00:38:35

    사실 예전에 저런  문제 .. return 값이 -334255454 이상한 값으로 반환하는 문제로..

    로직에서는 return 되는 affected row count로는 로직을 처리를 않하고 있습니다. 

    (드라이버 문제인지 mybatis 문제인지는 정확하지 않네요.)

    혹시 XXMapper.xml에 <update> 가 아닌 <insert>로 되어있는지도 한번 확인해보십숑.



    0
  • 콘푸로스트
    703
    2019-04-18 09:19:34

    update문을 merge문으로 변경해도 처리 시간이 오래 걸리나요?

    보통 merge로 변경하면 대량으로 처리할 때 속도가 빠르더라구요.

    0
  • 23424421242
    30
    2019-04-23 14:21:55

    바쁘신 와중에도 댓글 달아주셔서 정말 감사드립니다.

    해당 문제 해결하였습니다.


    계속 데이터가 반영이 안되었던 문제는 어이없게도 같은 조건으로 계속 update를 처리하므로 쿼리캐싱 때문에

    반영이 안되었던 현상이였습니다.


    그러므로 update 절에 join 절을 추가하여 LIMIT, OFFSET 을 이용한 데이터 증분 업데이트로 

    쿼리를 변경하였습니다.


    감사합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.