본문 바로가기

Spring/Querydsl

Querydsl- 벌크 연산

@Test // member.age가 28보다 적은 member.username을 "비회원"으로 update
public void bulkUpdate() throws Exception{
    // member1 = 10 -> 비회원
    // member2 = 20 -> 비회원
    // member3 = 30 -> 유지
    // member4 = 40 -> 유지

    long count = queryFactory
            .update(member)
            .set(member.username, "비회원")  //조건을 만족하는 member의 username이 "비회원"
            .where(member.age.lt(28))
            .execute();

    // 안 해주면 영속성 컨텍스트에서 데이터 가져와서 업데이트된 DB의 값을 가져오지 못함
    // em.flush();
    // em.clear();

    List<Member> result = queryFactory
            .selectFrom(member)
            .fetch();
    for (Member member1 : result) {
        System.out.println("member1 = " + member1);
    }
}

@Test  //모든 member.age에 1을 더해줌
public void bulkAdd() throws Exception{
    long count = queryFactory
            .update(member)
            .set(member.age, member.age.add(1))
            .execute();
}

@Test  //member.age가 25 이상인 member를 제거함
public void bulkDelete() throws Exception{
    long count = queryFactory
            .delete(member)
            .where(member.age.gt(25))
            .execute();

    List<Member> result = queryFactory
            .selectFrom(member)
            .fetch();

    for (Member member1 : result) {
        System.out.println("member1 = " + member1);
    }

}

 벌크 연산이란 여러개의 row를 한꺼번에 고치는 것을 의미한다. 이는 update( ), delete( ) 메서드와 excute( ) 메서드로 수행한다.

 

'Spring > Querydsl' 카테고리의 다른 글

Querydsl- 동적쿼리  (0) 2023.08.05
Querydsl- 프로젝션  (0) 2023.08.04
Querydsl- 조인  (0) 2023.07.27
Querydsl- 집합  (0) 2023.07.26
Querydsl- 정렬과 페이징  (0) 2023.07.25