Spring 썸네일형 리스트형 Querydsl 페이징과 카운터쿼리 최적화 1.Page로 반환 public Page Page(Pageable pageable) { List content = queryFactory .select((new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id.as("teamId"), team.name.as("teamName")))) .from(member) .leftJoin(member.team,team) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); JPAQuery countQuery = queryFactory .select(member.count()) .from(member) ... 더보기 Querydsl 동적 쿼리 1.BooleanBuilder public List dynamicQuery_BooleanBuilder(){ String usernameParam = "member1"; Integer ageParam = null; List result = searchMember1(usernameParam,ageParam); return result; } private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if(usernameCond!=null){ builder.and(member.username.eq(usernameCond)); } if(ageCond!=null){ bui.. 더보기 Querydsl 프로젝션 결과 반환 MemberDto @Data @NoArgsConstructor public class MemberDto { private String username; private int age; public MemberDto(String username, int age) { this.username = username; this.age = age; } } UserDto @Data @NoArgsConstructor public class UserDto { private String name; private int age; } 1.프로젝션 대상이 1개일 때 List result = queryFactory .select(member.username) .from(member) .fetch(); 프로젝션 대상이 1개이면 타입.. 더보기 Querydsl gradle 설정 1. gradle 설정(1) SpringBoot 3.0.0 미만dependencies{ //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" }//자동 생성된 Q클래스 gradle cle.. 더보기 Auditing기능을 이용한 등록일,수정일,등록자,수정자 관리 1.등록일,수정일 관리 @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public class BaseTimeEntity { @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime lastModifiedDate; } 2.등록자,수정자 관리 @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public class BaseEntity extends BaseTimeEntity { @CreatedBy @Column(updatable.. 더보기 벌크연산시 주의할 점 벌크성 수정쿼리 test 코드 @Test public void bulkUpdate() { //given memberRepository.save(new Member("member1", 10)); memberRepository.save(new Member("member2", 19)); memberRepository.save(new Member("member3", 20)); memberRepository.save(new Member("member4", 21)); memberRepository.save(new Member("member5", 40)); //when int resultCount = memberRepository.bulkAgePlus(20); Member member = memberRepositor.. 더보기 SpringData JPA를 활용한 페이징 및 정렬 1.반환 타입에 따른 count 쿼리 Page findByAge(@Param("age") int age,Pageable pageable); //count query 사용 Slice findByAge(@Param("age") int age, Pageable pageable); //count query 사용안함 List findByAge(@Param("age") int age, Pageable pageable); //count query 사용안함 List findByAge(@Param("age") int age, Sort sort); //count query 사용안함 2.Page와 Slice의 차이점 (1) Page 조회 쿼리 이후 전체 데이터 개수를 조회하는 카운트 쿼리가 실행된다. 총 데이터 개수가 필요.. 더보기 JPA 컬렉션 조회시 최적화 방법 1.Entity로 조회 시 최적화 방법 (1) 컬렉션 fetch join - 페이징 불가 public List findAllWithItem() { return em.createQuery("select distinct o from Order o " + "join fetch o.member m " + "join fetch o.delivery " + "join fetch o.orderItems oi " + "join fetch oi.item i",Order.class) .getResultList(); } fetch join을 이용하여 SQL이 1번만 실행된다. 일대다 조인시 orderItem의 수에 따라 order과 join 되어 DB의 row수가 증가하게 된다. 이 떄 JPA의 distinct를 사용하면 S.. 더보기 이전 1 2 3 4 5 다음