자바생
article thumbnail
728x90

벌크 연산이란 쿼리 한번으로 대량의 데이터를 수정하는 것을 말한다

 

JPQL에서도 지원하여, querydsl도 벌크 연산에 대해 지원한다

 

수정 벌크 연산

@Test
@DisplayName("수정 벌크 연산")
void bulkUpdate() throws Exception {

    long count = queryFactory //영향을 받은 row 수
            .update(member)
            .set(member.username, "비회원")
            .where(member.age.lt(20))
            .execute();

    em.flush();
    em.clear();

	print();

}

 

em.flush(), em.clear()를 해주지 않으면 원하는 결과가 나오지 않게 된다

간단하게 말하면 벌크 연산은 영속성 컨텍스트를 통하지 않고 디비에 sql을 바로 쏘기 때문이다

 

그래서 영속성 컨텍스트에 존재하는 값과 디비의 값에서 다를 수 있다

보면 update 쿼리가 따로 나가지 않았지만 값이 변경됐다

 

 

더하기

@Test
@DisplayName("벌크 더하기")
void bulkAdd() throws Exception {
    long count = queryFactory
            .update(member)
            .set(member.age, member.age.add(1))
            .execute();

    System.out.println("count = " + count);

    em.flush();
    em.clear();

    print();
}

 

곱하기

 

@Test
@DisplayName("벌크 곱하기")
void bulkAdd() throws Exception {
    long count = queryFactory
            .update(member)
            .set(member.age, member.age.multiply(2))
            .execute();

    System.out.println("count = " + count);

    em.flush();
    em.clear();

    print();
}

 

 

 

삭제 벌크 연산

@Test
@DisplayName("데이터 삭제 벌크")
void buldDelete() throws Exception {
    long count = queryFactory
            .delete(member)
            .where(member.age.gt(18))
            .execute();

    print();
}

 

 


REFERENCES

영한님 querydsl 강의

728x90
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그