본문 바로가기

querydsl7

JPA - 객체지향 쿼리 언어 - QueryDSL 메소드 위임 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 메소드 위임 메소드 위임을 사용하면 쿼리 타입에 검색 조건을 직접 정의할 수 있다. public class MemberExpression { @QueryDelegate(Member.class) public static BooleanExpression isAdult(QMember member) { return member.age.gt(19); } } Member 엔티티가 성인인지를 판단하는 검색조건을 추가해본다고 가정하자. 메소드 위임 기능을 사용하려면 static 메소드를 만들고 @QueryDelegate 어노테이션을 지정한다. 어노테이션 인자에는 해당 기능을 적용할 엔티티를 설정한다. 메소드의 첫번째 파라미터에는 Q-type 을 지정하고 나머지는 필요한.. 2021. 8. 26.
JPA - 객체지향 쿼리 언어 - QueryDSL 배치쿼리, 동적쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 수정, 삭제 배치쿼리 QueryDSL도 수정, 삭제 같은 배치쿼리를 지원한다. JPQL 배치쿼리와 같이 영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리를 수행한다. JPQL 배치는 추후에 다루도록 한다. QMember m = new QMember("m"); JPAUpdateClause updateClause = new JPAUpdateClause(em, m); updateClause.where(m.name.startsWith("Name")) .set(m.age, m.age.add(1)) .execute(); JPAQueryFactory query = new JPAQueryFactory(em); List members = query.select(m) ... 2021. 8. 24.
JPA - 객체지향 쿼리 언어 - QueryDSL 프로젝션 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 프로젝션 (Tuple) 조회를 하다보면 하나의 엔티티 형태가 아닌 여러 컬럼으로 이루어진 정보를 조회해야 할 때가 있다. 이때에는 JPQL 에서 살펴본것과 같이 Map 과 비슷한 방식의 Tuple 을 사용하면 된다. JPAQueryFactory query = new JPAQueryFactory(em); QMember m = new QMember("m"); List members = query.select(m.name, m.age) .from(m) .where(m.age.gt(10)) .fetch(); members.forEach(member -> { System.out.println("Member's name: " + member.get(m.name) +.. 2021. 8. 21.
JPA - 객체지향 쿼리 언어 - QueryDSL Join, 서브쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Join QueryDSL 에서 Join 은 innerJoin, leftJoin, rightJoin, fullJoin 을 지원한다. 또한 JPQL 의 on 과 fetch 기능도 사용가능하다. join 을 사용할때에는 1번째 파라미터에 조인 대상을, 2번째 파라미터에 alias 를 지정한다. 귀찮지만 Join 예제를 실행해보기 위해 Member 엔티티와 Order 엔티티가 맵핑된 데이터를 만들어주자. Member member1 = new Member(); member1.setName("Name#1"); member1.setAge(10); member1.setAddress( new Address("City#1", "Street#1", "Zipcode#1"));.. 2021. 8. 18.
JPA - 객체지향 쿼리 언어 - QueryDSL 검색조건, 페이징, 그룹 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 검색조건 QueryDSL 에서 검색조건 where 절의 기본 사용법을 알아보자. JPAQueryFactory query = new JPAQueryFactory(em); QMember qMember = QMember.member; List members = query.select(qMember) .from(qMember) .where(qMember.age.gt(20) .and(qMember.address.city.eq("City#2"))) .orderBy(qMember.age.desc()) .fetch(); members.forEach(member -> { System.out.println("Member age: " + member.getAge()); }).. 2021. 8. 16.
JPA - 객체지향 쿼리 언어 - QueryDSL 시작 - 참조: 자바 ORM 표준 JPA 프로그래밍 - QueryDSL 시작 여태까지 살펴본 Criteria 는 문자열로 작성한 JPQL 과는 다르게 문법 오류를 컴파일에서 잡을 수 있었지만 코드를 살펴보면 직관적이지 않은 부분이 있었다. QueryDSL 은 HQL 을 코드로 작성하기 위한 오픈소스 프로젝트 였지만 현재는 JPA, JDO, JDBC 등 여러 디비 제품군을 지원하고 있다. - 설정 JPA 카테고리 JPA - 객체지향 쿼리 언어 - 개요 글에서 QueryDSL 설정법을 살펴본적이 있지만 다시 한번 살펴보도록 하자. com.querydsl querydsl-apt provided com.querydsl querydsl-jpa ............ com.mysema.maven apt-maven-pl.. 2021. 8. 16.
JPA - 객체지향 쿼리 언어 - 개요 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Query DSL 공식 홈페이지: https://querydsl.com/ - Query DSL Release note: https://querydsl.com/releases - Query DSL 환경설정: https://www.baeldung.com/intro-to-querydsl - 개요 JPA 는 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. JPQL, Criteria, QueryDSL 등 JPA 를 배우지 못하다가 이렇게 책으로라도 배워야겠다고 마음먹은 사람들이라면 한번쯤 들어봤을 법한 단어들이 바로 엔티티 객체를 조회하는 쿼리기술들이다. 위와 같이 화려한 단어들 중 가장 중요한것은 JPQL 이다. Criteria 나 QueryDSL 도.. 2021. 7. 28.