728x90

querydsl 18

페이징과 정렬(feat.queryDSL)

QItem item = QItem.item; query.from(item) .where(item.price.gt(20000) .orderBy(item.price.desc(), item.stockQuantity.asc()) .offset(10).limit(20) .list(item); 정렬은 orderBy를 사용하는데 쿼리 타입(Q)이 제공하는 asc(), desc()를 사용한다. 페이징은 offset과 limit을 적절히 조합해서 사용하면 된다. 실제 페이징 처리를 하려면 검색된 전체 데이터 수를 알아야 한다. 이때는 list() 대신에 아래 예제와 같이 listResults()를 사용한다. SearchResults result = query.from(item) .where(item.price.gt(10..

QueryDSL 2022.06.17

검색 조건 쿼리(feat. QueryDSL)

JPAQuery query = new JPAQuery(em); //검색 조건 쿼리 실행 QItem item = QItem.item; List list = query.from(item) .where(item.name.eq("좋은상품").and(item.price.gt(20000))) .list(item); //조회할 프로젝션 지정 select item --실행된 JPQL from Item item where item.name ?1 and item.price > ?2 QueryDSL의 where 절에는 and 나 or을 사용할 수 있다. 또한 다음처럼 여러 검색 조건을 사용해도 된다. 이때는 and 연산이 된다. .where(item.name.eq("좋은 상품"), item.price.gt(20000)) 쿼..

QueryDSL 2022.06.17

QueryDSL(Criteria 보다 더 나은 JPQL 빌더)

쿼리를 문자가 아닌 코드로 작성해도, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있는 프로젝트가 바로 QueryDSL이다. QueryDSL도 Criteria처럼 JPQL 빌더 역할을 하는데 JPA Criteria를 대체할 수 있다. QueryDSL 설정 .... com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.querydsl.apt.jpa.JPAAnnotationProcessor .... com.querydsl querydsl-apt ${querydsl.version} provided com.querydsl querydsl-jpa ${querydsl.version} querydsl-jpa: Quer..

JPA 2022.06.16

QueryDSL 소개

QueryDSL 소개 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크입니다. 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있습니다. IDE의 코드 자동 완성 기능 사용 가능 문법적으로 잘못된 쿼리를 허용하지 않음(오류 체크) 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음 등 의 특징을 가집니다. //member, order 테이블에서 OrderStatus의 상태와 MemberName의 이름에 따라 값을 조회 public List findAll(OrderSearch orderSearch) { QOrder order = QOrder.order; QMember member = ..

JPA 2022.02.15

(Querydsl) ON 절을 활용한 조인

(Querydsl) ON 절을 활용한 조인 /** * 예) 회원과 팀을 조인하면서, 팀 이름이 teamA인 팀만 조인, 회원은 모두 조회 * SQL: SELECT m.*, t.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='teamA' */ @Test public void join_on_filtering() throws Exception { List result = queryFactory .select(member, team) .from(member) .leftJoin(member.team, team).on(team.name.eq("teamA")) .fetch(); for (Tuple tuple : result) { System.out.pr..

JPA 2022.02.14

queryDsl 기본 조인에 대해

(querydsl) 조인 - 기본 조인 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정합니다. join(조인 대상, 별칭으로 사용할 Q타입) 예제 /** * 팀 A에 소속된 모든 회원 조회 */ @Test public void join() throws Exception { QMember member = QMember.member; QTeam team = QTeam.team; List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting(..

JPA 2022.02.14

Q클래스 인스턴스 사용 방법 두가지

(JPA - Querydsl) Q클래스 인스턴스를 사용하는 방법에는 두 가지가 있습니다. QMember qMember = new QMember("m"); //별칭 직접 지정 (As-is) QMember qMember = QMember.member; //기본 인스턴스 사용 (To-be) 별칭 직접 지정 (As-is) 방법 @Test public void startQuerydsl2() { QMember m = new QMember("m"); Member findMember = queryFactory .select(m) .from(m) .where(m.username.eq("member1")) .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("memb..

JPA 2022.02.14

JPQL과 QueryDSL의 차이

JPQL과 Querydsl의 정의 JPQL(Java Persistence Query Language) JPA에서 제공하는 메서드 호출만으로 섬세한 쿼리 작성이 어려워서 생겨났습니다. JPA는 JPQL을 분석하여 SQL을 생성한 후 DB에서 조회합니다. Querydsl SQL을 java로 type-safe하게 개발 할 수 있게 해주는 프레임워크 Querydsl -> JPQL -> SQL 와 같이 동작 JPQL을 편하게 사용할 수 있게 도와주는 빌더의 역할 @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach //클래스에 ..

JPA 2022.02.14
728x90