개발이 좋아서/QueryDSL이 좋아서

    25장 사용자 정의 리포지토리

    25장 사용자 정의 리포지토리

    1) MemberRepositoryCustom package study.querydsl.repository; import study.querydsl.dto.MemberSearchCondition; import study.querydsl.dto.MemberTeamDto; import java.util.List; public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); } 2) MemberRepositoryImpl package study.querydsl.repository; import com.querydsl.core.types.Projections; import com.querydsl.core.types...

    24장 스프링 데이터 JPA 리포지토리로 변경

    24장 스프링 데이터 JPA 리포지토리로 변경

    1) interface로 생성 package study.querydsl.repository; import org.springframework.data.jpa.repository.JpaRepository; import study.querydsl.entity.Member; import java.util.List; public interface MemberRepository extends JpaRepository { List findByUsername(String username); } 2) package study.querydsl.repository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.A..

    23장 조회 API 컨트롤러 개발

    23장 조회 API 컨트롤러 개발

    1) 2) InitMember.java package study.querydsl.controller; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import study.querydsl.entity.Member; import study.querydsl.entity.Team; import javax.annotation.PostConstruct; import javax.persisten..

    22장 동적 쿼리와 성능 최적화 조회 - Where절 파라미터 사용

    1) MemberJpaRepository.java public List search(MemberSearchCondition condition) { return queryFactory .select( Projections.constructor( MemberTeamDto.class, member.id, member.username, member.age, team.id, team.name ) ) .from(member) .join(member.team, team) .where( usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe..

    21장 동적 쿼리와 성능 최적화 조회 - Builder 사용

    1) MemberTeamDto.java package study.querydsl.dto; import com.querydsl.core.annotations.QueryProjection; import lombok.Data; @Data public class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; // @QueryProjection public MemberTeamDto(Long memberId, String username, int age, Long teamId, String teamName) { this.memberId ..

    20장 순수 JPA 리포지토리와 Querydsl

    1) MemberJpaRepository package study.querydsl.repository; import com.querydsl.jpa.impl.JPAQueryFactory; import org.springframework.stereotype.Repository; import study.querydsl.entity.Member; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; import static study.querydsl.entity.QMember.*; @Repository public class MemberJpaRepository { private final EntityMan..

    19장 SQL function 호출하기

    SQL function은 JPA와 같이 Dialect에 등록된 내용만 호출할 수 있다. 1) member M으로 변경하는 replace 함수 사용 @Test public void sqlFunction(){ List result = queryFactory .select(Expressions.stringTemplate( "function('replace', {0}, {1}, {2})", member.username, "member", "M")) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } 2) 소문자로 변경해서 비교해라. @Test public void sqlFunction2(){ List resul..

    18장 수정, 삭제 벌크 연산

    1) 쿼리 한번으로 대량 데이터 수정 @Test public void bulkUpdate(){ long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); } 2) 기존 숫자에 1 더하기 @Test public void bulkAdd(){ long count = queryFactory .update(member) .set(member.age, member.age.add(1)) .execute(); } 3) 쿼리 한번으로 대량 데이터 삭제 @Test public void bulkDelete(){ long count = queryFactory .delete(member) .w..

    17장 동적 쿼리 - Where 다중 파라미터 사용

    1) @Test public void 동적쿼리_WhereParam() throws Exception { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember2(usernameParam, ageParam); Assertions.assertThat(result.size()).isEqualTo(1); } private List searchMember2(String usernameCond, Integer ageCond) { return queryFactory .selectFrom(member) .where(usernameEq(usernameCond), ageEq(ageCond)) .fetch(); } private ..

    16장 동적 쿼리 - BooleanBuilder 사용

    1) @Test public void 동적쿼리_BooleanBuilder() throws Exception { 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 BooleanBuilder(); if (usernameCond != null) { builder.and(member.username.eq..