Spring
-
Querydsl - Spring Data JPA에서 제공하는 페이징 활용Spring/Querydsl 2022. 3. 26. 22:10
Spring Data JPA에서 제공하는 페이징 활용 QueryDSl에서 페이징 사용 Count 쿼리 최적화 Controller 개발 QueryDSL에서 페이징 사용 1. 커스텀 인터페이스에 메서드 추가 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); Page searchPage(MemberSearchCondition condition, Pageable pageable);// (1) } (1) : Pageable 페이징에 필요한 정보 전달(offset, limit) 2. 커스텀 인터페이스 구현체에서 메서드 구현 @Override public Page searchPage(MemberSearchCon..
-
Querydsl - Spring Data JPA와 QueryDSLSpring/Querydsl 2022. 3. 26. 21:10
Spring Data JPA와 QueryDSL Spring Data JPA를 사용할 때 QueryDSL을 사용하기 위해선 사용자 정의 리포지토리와 구현체를 만들어 상속받아야 한다. QueryDSL을 사용하기 위한 순서 JpaRepository를 상속받는 인터페이스 생성 Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속받는 인터페이스 생성한다. public interface MemberRepository extends JpaRepository { } 사용자 정의 인터페이스 생성 QueryDSL을 사용하기 위해 필요한 인터페이스 생성 public interface MemberRepositoryCustom { List search(MemberSearchCondition con..
-
Querydsl - where절을 이용한 동적 쿼리와 성능 최적화Spring/Querydsl 2022. 3. 26. 18:19
where절을 이용한 동적 쿼리와 성능 최적화 Member와 Team을 동적 쿼리를 이용하여 해당 조건에 맞는 데이터를 가져와 보자 1. 성능 최적화를 위해 DB에서 필요한 데이터만 가져올 수 있는 DTO를 생성한다. @Data public class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; public MemberTeamDto() { } @QueryProjection// (1) public MemberTeamDto(Long memberId, String username, int age, Long teamId, Strin..
-
Querydsl - BooleanBuilder를 사용한 동적 쿼리와 성능 최적화Spring/Querydsl 2022. 3. 26. 17:16
BooleanBuilder를 사용한 동적 쿼리와 성능 최적화 Member와 Team을 동적 쿼리를 이용하여 해당 조건에 맞는 데이터를 가져와 보자. 1. 성능 최적화를 위해 DB에서 필요한 데이터만 가져올 수 있는 DTO를 생성한다. @Data public class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; public MemberTeamDto() { } @QueryProjection// (1) public MemberTeamDto(Long memberId, String username, int age, Long team..
-
Querydsl - Repository에서 Querydsl 사용하기Spring/Querydsl 2022. 3. 26. 16:21
Repository에서 Querydsl 사용하기 Querydsl을 사용하기 위해서는 JPAQueryFactory가 필요한데 Qeurydsl을 사용하는 Repository에서 주입받을려면 불편하다. 따라서 Config를 생성하여 JPAQueryFactory를 bean으로 등록하고 사용할 Repository에서 생성자 주입받는 것을 추천한다. @Configuration public class JpaConfig { @Bean JPAQueryFactory jpaQueryFactory(EntityManager em) { return new JPAQueryFactory(em); } } 참고로 동시성 문제는 문제가 없다. 스프링이 주입해주는 EntityManager는 실제 동작 시점에 진짜 EntityManager를..
-
Querydsl - 수정, 삭제 벌크 연산Spring/Querydsl 2022. 3. 25. 15:25
수정, 삭제 벌크 연산 여러개 수정, 삭제를 하면 데이터 수만큼 쿼리가 나가지만 벌크 연산을 사용하면 쿼리가 1번만 나간다. 따라서 여러개 수정, 삭제를 할 때는 벌크 연산을 사용하면 성능이 최적화된다. @Test @DisplayName("벌크 연산") public void bulkUpdate() { long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); assertThat(count).isEqualTo(2); } count : 업데이트가 수행된 수 execute() : 벌크 연산 수행 /* update Member member1 set member1.username..
-
Querydsl - where절을 이용한 동적 쿼리Spring/Querydsl 2022. 3. 25. 14:36
where절을 이용한 동적 쿼리 where절을 이용하여 동적 쿼리를 처리할 수 있다. where 조건에서 null 값이 들어오면 값은 무시되고 쿼리가 생성된다. 이러한 특성 때문에 다른 쿼리에서도 재활용이 가능한 장점이 있고, 또한 쿼리 자체의 가독성이 높아진다. BooleanBuilder보다 사용하기 편하므로 이 방법을 권장한다. @Test public void dynamicQuery_WhereParam() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember2(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List..
-
Querydsl - BooleanBuilder 이용한 동적 쿼리Spring/Querydsl 2022. 3. 25. 14:19
BooleanBuilder 사용한 동적 쿼리 BooleanBuilder를 사용하면 동적 쿼리를 사용할 수 있다. where 절에서 사용하는 데이터 값이 null 일 경우 조건을 제외시킬 수 있어 동적 쿼리를 만들기 편리하다. @Test @DisplayName("BooleanBuilder를 이용한 동적쿼리") public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List searchMember1(S..