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
728x90
'Spring 강의 > QueryDSL' 카테고리의 다른 글
순수 JPA Repo + Querydsl, 동적 쿼리 (0) | 2022.05.14 |
---|---|
프로젝션과 결과 반환, 동적 쿼리 (0) | 2022.05.12 |
QueryDsl 조인 ~ (0) | 2022.05.02 |
JPQL & Querydsl , Querydsl 검색 조건, 결과(fetch), 정렬, 페이징, 집합 (0) | 2022.04.29 |