목록BE (354)
오봉이와 함께하는 개발 블로그
수정, 삭제 벌크 연산 JPA는 기본적으로 변경 감지(Dirty Checking)를 통해서 업데이트 처리 하는데, 변경 감지를 통한 업데이트는 업데이트 쿼리가 건당 하나씩 나가기 때문에 대량의 데이터를 변경할 때 사용하기 적합하지 않다. 쿼리 한번으로 대량 데이터 수정 @Test void bulkUpdate() { // member 1 = 10 -> 비회원 // member 2 = 20 -> 비회원 long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); assertThat(count).isEqualTo(2); } 기존 숫자에 1 더하기 @Test void bulkAd..
동적 쿼리 - Where 다중 파라미터 사용 private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fetch(); } private BooleanExpression usernameEq(String usernameCond) { if (usernameCond == null) { return null; } return member.username.eq(usernameCond); // return usernameCond != null ? member.username.eq(usernameC..
동적 쿼리 - BooleanBuilder 사용 동적 쿼리를 해결하는 두가지 방식 BooleanBuilder Where 다중 파라미터 사용 BooleanBuilder @Test void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new Boo..
프로젝션과 결과 반환 - @QueryProjection 생성자 + @QueryProjection @Data public class MemberDto { private String username; private int age; public MemberDto() { } @QueryProjection public MemberDto(String username, int age) { this.username = username; this.age = age; } } @QueryProjection 추가 후 gradle -> other -> compileQuerydsl 후 QMemberDto 생성 확인 /** * study.querydsl.dto.QMemberDto is a Querydsl Projection typ..
프로젝션과 결과 반환 - DTO 조회 먼저 순수 JPA에서 DTO 조회하는 방법을 보자. 순수 JPA에서 DTO 조회 @Data public class MemberDto { private String username; private int age; public MemberDto(String username, int age) { this.username = username; this.age = age; } } @Test void findDto() { List result = em.createQuery("select new study.querydsl.dto.MemberDto(musername, m.age) " + "from Member m", MemberDto.class) .getResultList(); f..