본문 바로가기

공부141

QueryDSL에서 수정, 삭제 벌크연산 하는방법을 알아보자 수정, 삭제 배치쿼리를 해보자 배치쿼리를 적용한 경우 JPQL 배치와 마찬가지로, 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화 하는 것이 안전하다. 쿼리 한번으로 대량 데이터를 수정해보자 1. 수정 예제 비회원으로 변경(28이하) 더하기 long count = queryFactory .update(member) .set(member.age, member.age.add(1)) .execute(); 곱하기 long count = queryFactory .update(member) .set(member.age, member.age.multiply(2)) .execute(); 2. 삭제 예제 long count = queryFactory .dele.. 2022. 8. 26.
[QueryDSL] 동적쿼리를 해결해보자 동적쿼리를 해결해보자 해결하는 방법은 두 가지 방법이 있다. BooleanBuilder Where 다중 파라미터 사용 하나씩 살펴보자! 1. BooleanBuilder null이 아닌 경우에만 검증 로직을 적용하고 싶을 때 다음과 같이 적용할 수 있다. 2. Where 다중 파라미터 사용 (실무에서 많이 사용한다!) by 김영한님 이 방법을 사용하면 코드가 한층 깔끔해진다. 아래 코드를 보고 바로 이해할 수 있기 때문이다. private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fe.. 2022. 8. 26.
[QueryDSL] 프로젝션(SELECT 대상)에 따라 다른 결과를 가져와 보자 1. 프로젝션에 대상 개수에 따른 결과 프로젝션은 SELECT 대상 지정이다. 1-1. 대상이 하나일 때 타입을 명확하게 지정할 수 있다. 1-2. 대상이 둘 이상 List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username = tuple.get(member.username); Integer age = tuple.get(member.age); System.out.println("username=" + username); System.out.println("age=" + age); } 대상이 둘 이상이면 튜플이나 DTO로 조회하자 .. 2022. 8. 26.
[QueryDSL] 기본 문법을 알아보자 1. JPQL vs Querydsl를 비교하여 장점을 알아보자 예제로 비교해보자. member1를 찾아보자 JPQL를 사용한 예제 String query ="select m from Member m where m.username = :username"; Member findMember = em.createQuery(query, Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(findMember.getUsername()).isEqualTo("member1"); Querydsl를 사용한 예제 JPAQueryFactory를 사용한다. 컴파일 시점에 오류를 발견한다. 파라미터 바인딩을 알아서 해준다. 쿼리를 자바코.. 2022. 8. 26.
QueryDSL을 적용해보자 Querydsl 이란? 쿼리를 자바코드로 작성할 수 있다. 또한, Spring Data JPA로 해결하지 못하는 복잡한 쿼리/동적 쿼리를 해결할 수 있다. Querydsl 왜 사용할까? 쿼리-를 자바 코드로 작성할 수 있다. 문법 오류를 컴파일 시점에 알 수 있다. dependency 설정방법 (gradle) 플러그인에 추가 plugins { id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } dependencies에 추가 dependencies { implementation 'com.querydsl:querydsl-jpa' } 추가 def querydslDir = "$buildDir/generated/querydsl" querydsl { library.. 2022. 8. 26.
스프링 데이터 JPA에서 Auditing을 적용해보자! Auditing은? 엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶을 때 사용한다. 실무에서 많이 사용된다. 등록일 : 모든 테이블에 공통으로 적용 (권장) 수정일 : 모든 테이블에 공통으로 적용 (권장) 등록자, 수정자 : 테이블에 따라 정한다 (팀 컨밴션) 먼저, 순수 JPA에서 사용한다면? 우선, 등록일과 수정일만 적용해보자 public class Member extends JpaBaseEntity { } @*MappedSuperclass :* 는 테이블과는 관계가 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모아주는 역할이다. @PrePersist : 엔티티가 비영속 상태에서 영속 상태가 되는 시점 이전에 실행된다. @PreUpdate : 영속 상태의 엔티티를 이용하여 데이터 .. 2022. 8. 25.