목록BE (354)
오봉이와 함께하는 개발 블로그
조인 - on절 ON절을 활용한 조인(JPA 2.1부터 지원) 조인 대상 필터링 연관관계 없는 엔티티 외부조인 1. 조인 대상 필터링 회원과 팀을 조인하면서, 팀 이름이 teamA인 팀만 조인, 회원은 모두 조회 /** * 예) 회원과 팀을 조인하면서, 팀 이름이 teamA인 팀만 조인, 회원은 모두 조회 * JPQL : SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'teamA' * SQL : SELECT m.*, t.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='teamA' */ @Test void join_on_filtering() { List res..
조인 - 기본 조인 기본 조인 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 된다. join(조인 대상, 별칭으로 사용할 Q타입)테스트 /* * 팀 A에 소속된 모든 회원 조회 * */ @Test void join() { List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting("username") .containsExactly("member1", "member2"); } join(), innerJoin() : 내부 조인(in..
집합 집합 함수 /** * JPQL * select * COUNT(m), //회원수 * SUM(m.age), //나이 합 * AVG(m.age), //평균 나이 * MAX(m.age), //최대 나이 * MIN(m.age) //최소 나이 * from Member m */ @Test public void aggregation() throws Exception { List result = queryFactory .select(member.count(), member.age.sum(), member.age.avg(), member.age.max(), member.age.min()) .from(member) .fetch(); Tuple tuple = result.get(0); assertThat(tuple.ge..
페이징 조회 건수 제한 @Test void paging1() { List result = queryFactory .selectFrom(member) .orderBy(member.username.desc()) .offset(1) // 0부터 시작(zero index) .limit(2) // 최대 2건 조회 .fetch(); assertThat(result.size()).isEqualTo(2); } 전체 조회 수가 필요하면? @Test void paging2() { QueryResults queryResults = queryFactory .selectFrom(member) .orderBy(member.username.desc()) .offset(1) // 0부터 시작(zero index) .limit(2) ..
정렬 /** *회원 정렬 순서 * 1. 회원 나이 내림차순(desc) * 2. 회원 이름 올림차순(asc) * 단 2에서 회원 이름이 없으면 마지막에 출력(nulls last) */ @Test void sort() { em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)) List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.username.asc().nullsLast()) .fetch() Member member5 =..