스프링 데이터 JPA와 Querydsl사용자 정의 레포지토리사용자 정의 레포지토리 : 스프링 데이터 JPA가 제공하는 인터페이스 메소드를 직접 구현하는 방법주로 Querydsl을 사용해서 동적 쿼리를 작성할 때 사용자 정의 레포지토리를 사용한다. 사용자 정의 레포지토리 사용법사용자 정의 인터페이스 작성사용자 정의 인터페이스 구현사용자 정의 인터페이스 구현 클래스의 이름은 스프링 데이터 레포지토리명 + Impl로 반드시 적어줘야한다.스프링 데이터 레포지토리에 사용자 정의 인터페이스 상속 //사용자 정의 인터페이스public interface MemberRepositoryCustom { List search(MemberSearchCondition memberSearchCondition);}//사용자 정..
실무 활용동적 쿼리와 성능 최적화 조회 - Builder 사용/** * 나이, 회원명, 팀명으로 동적 쿼리 * @param condition * @return */@Repositorypublic class MemberJpaRepository { public List searchByBuilder(MemberSearchCondition condition) { BooleanBuilder builder = new BooleanBuilder(); if (StringUtils.hasText(condition.getUsername())) { builder.and(member.username.eq(condition.getUsername())); ..
중급 문법프로젝션과 결과 반환 - 기본프로젝션 : SELECT 대상 지정프로젝션 대상이 하나일 땐 타입을 명확하게 지정할 수 있다.프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 List result = queryFactory .select(member.username) .from(member) .fetch();프로젝션 대상이 하나일 때 List result = queryFactory .select(member.username, member.age) .from(member) .fetch();프로젝션 대상이 둘 이상일 때 Tuple 타입은 Re..
기본 문법JPAQueryFactory queryFactory = new JPAQueryFactory(em);QMember m = new QMember("m"); //어떤 QMember인지 이름을 주는 것Member findMember = queryFactory .select(m) .from(m) .where(m.username.eq("member1")) .fetchOne();Querydsl을 사용하려면 EntityManager를 인자로 넘겨서 JPAQueryFactory를 먼저 생성해야 한다.필드로 가져가서 사용해도 상관없다. (동시성 문제x)Q타입을 사용할 때 같은 테이블끼리 조인하는 경우에만 별..
프로젝트 환경설정Querydsl은 gradle에 별도의 라이브러리를 추가해줘야한다. Q 타입 클래스 : 엔티티를 보고 Querydsl이 생성하는 Q모델이라는 쿼리 타입 클래스이다. Querydsl을 사용하면서 쿼리문을 작성하기 위해서 Q 타입 클래스가 필요하다.Q 타입은 컴파일 시점에 자동 생성되므로 버전관리(Git)에 포함하지 않는 것이 좋다.Q 타입을 gradle build 폴더 하위에 생성되게 하면 git에 포함되지 않는다. Querydsl을 사용할 때 쿼리와 관련된 내용들은 모두 Q 타입 클래스를 사용해야한다. implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'build.gradle 파일에 추가 시 로깅에서 파라미터 ..