Everyday Dev System

QueryDSL 수정, 삭제 배치 쿼리 본문

카테고리 없음

QueryDSL 수정, 삭제 배치 쿼리

chaeyoung- 2023. 8. 1. 20:49

 

본 글은 다음 글을 참조하여 일부만 변경하여 작성하였으니, 아래 글을 먼저 확인 부탁드립니다.

아래 게시글을 참조하였고, 해당 글은 코드에 대한 자세한 설명만 추가한 글입니다.

https://cherrypick.co.kr/querydsl-update-delete/

 

QueryDSL 수정, 삭제 배치 쿼리

JPQL 배치 쿼리와 같이 영속성 컨텍스트를 무시하고 데이터베이스를 직접 쿼리한다. QItem item = Qitem.item; JPAUpdateClause updateClause = new JPAUpdateClause(em, item); long count = updateClause.where(item.name.eq("체리픽"))

cherrypick.co.kr

 

 

 

QItem item = Qitem.item;
JPAUpdateClause updateClause = new JPAUpdateClause(em, item);
long count = updateClause.where(item.name.eq("chaeyoung")).set(item.price, item.price.add(100)).execute();

 

  1. QItem item = Qitem.item;
    • Querydsl 라이브러리를 사용하여 JPA 쿼리를 생성하기 위한 Q-객체를 만듭니다.
    • QItem은 Item 엔티티에 대한 Querydsl Q타입 클래스를 의미합니다.
    • Qitem.item은 QItem 클래스에서 정의한 item static field로, 이는 쿼리에서 사용할 엔티티에 대한 별칭(alias) 역할을 합니다.
  2. JPAUpdateClause updateClause = new JPAUpdateClause(em, item);
    • JPA 엔티티를 업데이트하는 데 사용되는 JPAUpdateClause 객체를 생성합니다.
    • em은 Entity Manager를 의미합니다. 이는 JPA를 통해 DB와 상호 작용하는데 사용됩니다.
    • item은 위에서 만든 QItem 객체로, 업데이트할 엔티티를 지정하기 위해 넣어줬습니다.
  3. long count = updateClause.where(item.name.eq("chaeyoung")).set(item.price, item.price.add(100)).execute();
    • 실제 엔티티를 업데이트하는 코드입니다.
    • updateClause.where(item.name.eq("chaeyoung"))는 item 엔티티에서 이름이 "chaeyoung"인 행(레코드)을 선택하는 조건을 지정합니다.
    • set(item.price, item.price.add(100))는 선택된 행의 price 필드를 100만큼 증가시킵니다.
    • execute()는 실제로 DB에 업데이트 쿼리를 수행하는 메서드입니다.
    • long count는 업데이트가 적용된 행의 수를 나타내는 변수입니다.

 

요약하면, 이 코드는 JPA와 Querydsl을 사용하여 item 테이블에서 이름이 "chaeyoung"인 레코드의 가격을 100 증가시키는 업데이트 쿼리를 실행합니다.

 

 

 

QItem item = Qitem.item;
JPADeleteClause deleteClause = new JPADeleteClause(em, item);
long count = deleteClause.where(item.name.eq("chaeyoung")).execute();

 

  1. QItem item = Qitem.item;
    • Querydsl 라이브러리를 사용하여 JPA 쿼리를 생성하기 위한 Q-객체를 만듭니다.
    • QItem은 Item 엔티티에 대한 Querydsl Q타입 클래스를 의미합니다.
    • Qitem.item은 QItem 클래스에서 정의한 item static field로, 이는 쿼리에서 사용할 엔티티에 대한 별칭(alias) 역할을 합니다.
  2. JPADeleteClause deleteClause = new JPADeleteClause(em, item);
    • JPA 엔티티를 삭제하는데에 사용되는 JPADeleteClause 객체를 생성합니다.
    • em은 Entity Manager를 의미합니다. 이는 JPA를 통해 DB와 상호 작용하는데 사용됩니다.
    • item은 위에서 만든 QItem 객체로, 삭제할 엔티티를 지정하기 위해 넣어줬습니다.
  3. long count = deleteClause.where(item.name.eq("chaeyoung")).execute();
    • 실제 엔티티를 삭제하는 코드입니다.
    • deleteClause.where(item.name.eq("chaeyoung"))는 item 엔티티에서 이름이 "chaeyoung"인 행(레코드)을 선택하는 조건을 지정합니다.
    • execute()는 실제로 DB에 삭제 쿼리를 수행하는 메서드입니다.
    • long count는 삭제가 적용된 행의 수를 나타내는 변수입니다.