분류 전체보기 954

17. 서브 쿼리

그 왜 SQL에서 막 쓰다가 () 괄호 하고 새 쿼리 쓰는 그걸 서브 쿼리라고 함. 일단 서브쿼리를 사용할 때는 JPAExpressions, 직역은 JPA 표현식을 이용 // 나이가 가장 많은 회원 조회 @Test public void subQuery(){ QMember memberSub = new QMember("memberSub"); Member member = query.selectFrom(m).orderBy(m.age.desc()).limit(1).fetchOne(); System.out.println("member = " + member.getAge()); List result = query.selectFrom(m). where( m.age.eq( JPAExpressions. select(mem..

16. join fetch

join fetch는 SQL에서 제공하는 기능은 아니다. SQL의 조인을 활용하여 여러 엔티티를 한번에 가져오는 쿼리를 만들어 주는 기능이다. https://qwefdg3.tistory.com/782 여기 참고 먼저 join fetch 안했을 때 @Autowired EntityManagerFactory emf; @Test public void fetchJoinNo(){ em.flush(); em.clear(); Member member = query.selectFrom(m).where(m.username.eq("member1")).fetchOne(); boolean loaded = emf.getPersistenceUnitUtil().isLoaded(member.getTeam()); assertThat(l..

15. join on

QueryDSL에서 on절은 조인 대상 필터링 연관관계가 없는 테이블 외부 조인 이 두가지 역할이 가능하다. 이번엔 주로 left join에 대해서 말 할것이다. 먼저, left join이란 from절에 있는 것에 join해서 가져온 것 중 각각 on절에 해당하는 것을 묶어서 나열하는 것이다. from이 중심이다. from의 대상이 되는 것은 다 나열된다. 근데 join해서 가져온 것 중에 from절의 테이블과 연이 없는 것은 그냥 그 열들은 null 상태로 둔다. 그래서, 다대일 관계는 from절과 join절의 테이블 위치를 바꿀 시 결과가 다를 수 있다. from 중심으로, from은 다 나열하고, join해서 가져온 것 중 on의 조건에 맞으면 그 row끼리 붙인다. (근데 이 때 아무래도 일대다 ..

14. join

QMember m = QMember.member; QTeam team = QTeam.team; join(m.team, team) join(조인할대상, 별칭으로사용할Q타입) @Test public void join(){ List result = query.selectFrom(m).join(m.team, t).where(t.name.eq("teamA")).fetch(); assertThat(result).extracting("username").containsExactly("member1", "member2"); } m이 가지고 있는 team을 join해서 가지고 오고, 위에 QTeam = QTeam.team이라고 해놨다. 그 Q클래스를 별칭용 클래스로 쓸 것이다. extracting은 적출 이란 뜻인데, ..

13. 그룹

group by, having 이런 거. 지금 시간들은 일단 1차적으로, QueryDSL의 사용방법, 즉 문법을 알아보는 시간임. @Test public void aggregation(){ List result = query.select(m.count(), m.age.sum(), m.age.avg(), m.age.max(), m.age.min()) .from(m) .fetch(); Tuple tuple = result.get(0); assertThat(tuple.get(m.count())).isEqualTo(4); assertThat(tuple.get(m.age.sum())).isEqualTo(100); assertThat(tuple.get(m.age.avg())).isEqualTo(25); assert..

리액트 프로파일러

이거 브라우저 확장프로그램에 있음. 그거 다운받아서 쓰면 됨. 컴포넌트에 대한 정보 보는 것도 있음. 여러가지 나옴. props, 사용한 훅, 뭐에 의해 랜더링 됐는지 등 다시 프로파일러 돌아와서, 저 파란버튼 누르면 측정 시작 저거 누른 후, 활동하면 됨. 뭐 버튼 누르거나 등. 그 후 측정 시작되서 빨간버튼이던 걸 다시 누르면 결과가 나옴. 그러면 랜더링 얼마나 걸렸는지 나옴. 이걸로 확인해보면서 어느 컴포넌트에서, 뭐가 얼마나 걸렸는지 확인하면서 작업하면 됨.

React 2023.11.28

12. 페이징

페이징이다. 여기선 간단하게 몇번째부터 몇개까지 라고 이해하면 된다. Spring Data JPA에서 객체로 했던 페이징은 뭐랄까 좀더 인간친화적인? 몇페이지의 몇개, 이거고, 이 QueryDSL은 자바의 쿼리 메소드를 통해 JPQL 즉, 쿼리를 만드는 것이므로, offet(몇번째부터), limit(개수)를 활용한다. @Test public void paging1(){ List result = query.selectFrom(m).orderBy(m.username.desc()) .offset(1) .limit(2) .fetch(); for (Member member : result) { System.out.println("member = " + member.getUsername()); } } /* sele..

10. 결과 조회

지금까지 fetchOne()해서 단건 조회만 함 fetch() // 리스트 조회, 데이터 없으면 빈 리스트 반환 fetchOne() // 단건 조회, 데이터 없으면 null, 결과가 둘 이상이면 Exception fetchFirst() // limit(1).fetchOne(), 즉 처음 페이지의 맨처음 데이터 단건만 조회 fetchResults() // 페이징 정보 포함, total count 쿼리 추가 실행. 즉 페이징하고 페이징 데이터 포함 객체 가져오기 용 fetchCount() // count 쿼리 날려서 count만 조회. 일단은 fetch(), fechOne(), fetchFirst() List fetch = query.selectFrom(m).fetch(); Member fetchOne = ..