목록BE/JPA (112)
오봉이와 함께하는 개발 블로그
프로젝션과 결과 반환 - DTO 조회 먼저 순수 JPA에서 DTO 조회하는 방법을 보자. 순수 JPA에서 DTO 조회 @Data public class MemberDto { private String username; private int age; public MemberDto(String username, int age) { this.username = username; this.age = age; } } @Test void findDto() { List result = em.createQuery("select new study.querydsl.dto.MemberDto(musername, m.age) " + "from Member m", MemberDto.class) .getResultList(); f..
프로젝션과 결과 반환 - 기본 프로젝션이란 select절에 어떤 것을 가져올지에 대한 대상을 지정하는 것이다. 프로젝션 대상이 하나 @Test void simpleProjection() { List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 튜플 조회 Querydsl이 여러 개 조회할 때를 대비해서 만들어놓은 임의의 타입으로 프로젝션 대상이 둘 이상일 때 사용한다. com.querydsl.core.Tupl..
상수, 문자 더하기 상수가 필요하면 Expressions.constant(xxx)를 사용하자. @Test void constant() { List result = queryFactory .select(member.username, Expressions.constant("A")) .from(member) .fetch() for (Tuple tuple : result) { System.out.println("tuple = " + tuple); } } tuple = [member1, A] tuple = [member2, A] tuple = [member3, A] tuple = [member4, A]위와 같이 최적화가 가능하면 SQL에 constant 값을 넘기지 않는다. 상수를 더하는 것 처럼 최적화가 어려우..
Case 문 select, 조건절(where), order by에서 사용 가능하다. 단순한 조건 @Test void basicCase() { List result = queryFactory .select(member.age .when(10).then("열살") .when(20).then("스무살") .otherwise("기타") ) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } 결과 s = 열살 s = 스무살 s = 기타 s = 기타복잡한 조건 @Test void complexCase() { List result = queryFactory .select(new CaseBuilder() .when(m..
서브 쿼리 com.querydsl.jpa.JPAExpressions를 사용한다. 서브 쿼리 eq 사용 /* * 나이가 가장 많은 회원 조회 * */ @Test void subQuery() { QMember memberSub = new QMember("memberSub") List result = queryFactory .selectFrom(member) // member 조회 .where(member.age.eq( // member.age가 memberSub(member)중 max()값이랑 같은 조건 JPAExpressions.select(memberSub.age.max()) .from(memberSub) )) .fetch(); assertThat(result).extracting("age").conta..