📦 Database/QueryDSL2023. 5. 21. 00:11Query Builder - SubQuery Join - eq & goe

SubQuery Join com.querydsl.jpa.JPAExpressions을 사용합니다. Subquery Join은 하위 쿼리를 사용하여 조인을 수행하는 방식입니다. Subquery Join을 사용하면 메인 쿼리와 서브쿼리 사이에 조인을 수행할 수 있습니다. 이를 통해 복잡한 조인 조건이나 필터링 작업을 수행할 수 있습니다. eq() /** @desc SubQuery Join - eq 사용 */ @Test fun subQueryJoin() { val m = QMember.member val sub = QMember("sub") val result = queryFactory .selectFrom(m) .where(m.age.eq(JPAExpressions .select(sub.age.max()) ...

📦 Database/QueryDSL2023. 5. 20. 21:51Query Builder - Inner & Outer & Cross Join

기본 Join 문법 조인의 기본 문법은 첫번째 파라미터에 조인 대상을 지정하고, 두번째 파라미터에 별칭(alias)으로 사용할 Q-Type을 지정하면 됩니다. join(조인대상, 조인 대상 테이블(Q-Type Entity)) join(), innerJoin() : 내부 조인 leftJoin() : left 외부 조인 (left outer join) rightJoin() : right 외부 조인 (right outer join) JPQL의 On과 성능 최적화를 위한 fetch join 제공 Inner Join Hibernate 5.1 부터 On을 사용해 서로 연관관계가 없는 필드로 외부조인 하는 기능이 추가되었습니다. 물론 내부 조인도 가능합니다. 주의할 점은 leftJoin() 부분에는 일반 조인과 다르..

📦 Database/QueryDSL2023. 5. 20. 20:34Query Builder - Aggregation & Group By & Having

집합 함수 JPQL이 제공하는 모든 집합 함수를 제공합니다. /** * COUNT(m) - 회원 수 * SUM(m.age) - 나이 합 * AVG(m.age) - 평균 나이 * MAX(m.age) - 최대 나이 * MIN(m.age) - 최소 나이 * @desc 집합 함수 */ @Test fun aggregation() { val m: QMember = QMember.member val result: MutableList? = queryFactory .select( m.count(), m.age.sum(), m.age.avg(), m.age.max(), m.age.min() ) .from(m) .fetch() val tuple = result?.get(0) assertThat(tuple?.get(m.co..

📦 Database/QueryDSL2023. 5. 20. 20:18Query Builder - Sort, Paging

💡 Sort desc(), asc() : 일반 정렬 nullsLast(), nullsFirst() : null 데이터에 순서 부여 /** * 회원 정렬 순서 * 1. 회원 나이 내림차순 (desc) * 2. 회원 이름 올림차순 (asc) * 단 2에서 회원 이름이 없으면 마지막에 출력 (nulls test) * */ @Test fun sort() { val m: QMember = QMember.member em.persist(Member(null, 100)) em.persist(Member("member5", 100)) em.persist(Member("member6", 100)) val result = queryFactory .selectFrom(m) .where(m.age.eq(100)) .order..

📦 Database/QueryDSL2023. 5. 20. 18:54Query Builder - 검색 조건 쿼리

💡검색 조건 쿼리 검색 조건은 .and() & .or() 메서드 체인으로 연결하여 조건을 추가할 수 있다. @SpringBootTest @Transactional class SearchTest @Autowired constructor( @PersistenceContext val em: EntityManager, val queryFactory: JPAQueryFactory ) { /** @desc 기본 검색 쿼리 */ @Test fun search() { val m: QMember = QMember("m") val findMember = queryFactory .selectFrom(m) .where(m.name.eq("member1").and(m.age.eq(10))) .fetchOne() assertTh..

📦 Database/QueryDSL2023. 5. 20. 17:40Query Builder - JPQL vs QueryDsl

💡 JPQL vs QueryDsl EntityManafer와 JPAQueryFactoru를 클래스의 생성자로 준다. 테스트 코드 작성 JPQL과 QueryDSL의 차이점 JPQL(문자)은 실행 시점에 오류가 나고 QueryDsl(코드)은 컴파일 타임에 오류가 난다. JPQL은 파라미터 바인딩을 직접하지만, QueryDsl은 동적으로 처리된다. Q-Type에 별칭을 지정할 수 있다. 실행되는 JPQL을 보고 싶으면 application.yml에 다음을 추가한다. spring.jpa.properties.hibernate.use_sql_comments: true @SpringBootTest @Transactional class QueryDslBasicTest @Autowired constructor( @Per..

📦 Database/QueryDSL2023. 5. 20. 17:12Query Builder - 초기 설정

💡 QueryDSL - Auto Entity Serialization 코틀린 기반 Spring Boot에서 QueryDSL을 이용해 자동으로 엔티티 직렬화를 하려면 다음과 같은 설정이 필요합니다. Gradle 설정 QueryDSL을 사용하기 위해서는 Gradle에 QueryDSL 관련 의존성을 추가해야 합니다. build.gradle 파일에 다음과 같이 의존성을 추가합니다. plugins { kotlin("kapt") version "1.4.10" // QueryDSL idea // QueryDSL } val querydslVersion ="5.0.0" // QueryDSL dependencies { implementation("com.querydsl:querydsl-jpa:$querydslVersion..

image