본문 바로가기

전체 글131

[JPQL] 다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크 연산 📌 다형성 쿼리 Album, Movie, Book이 Item을 상속받는 구조 설계. Type 조회 대상을 특정 자식으로 한정 ex. Item 중에 Book, Movie를 조회해라 [JPQL] select i from Item i where type(i) IN (Book, Movie) [SQL] select i from i where i.DTYPE IN ('B', 'M') TREAT(JPA 2.1) 자바 타입 캐스팅과 유사 상속구조에서 부모타입을 특정 자식타입으로 다룰 때 사용 FROM, WHERE, SELECT(Hibernate 지원) 사용 ex. 부모인 Item과 자식 Book이 있다. [JPQL] select i from Item i where treat(i as Book).auther = 'kim'.. 2023. 4. 26.
[JPQL] 경로 표현식, 페치 조인(N+1문제 해결) 📌 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 select m.username → 상태 필드 from Member m join m.team t → 단일 값 연관 필드 join m.orders o → 컬렉션 값 연관 필드 where t.name ='팀A' 경로 표현식 용어 정리 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 (ex: m.username) 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 경로 표현식 특징 상태 필드(state fi.. 2023. 4. 26.
[JPQL] 타입 표현과 기타식, 조건식(CASE 등등), 기타 함수 📌 JPQL 타입 표현과 기타식 문자 : 'HELLO', 'She"s' 숫자: 10L(Long), 10D(Double), 10F(Float) Boolean: TRUE, FALSE ENUM: jpql.MemberType.Admin(패키지명 포함) select m.username, 'HELLO', true from Member m where m.type = jpql.MemberType.ADMIN // 파라미터 바인딩 경우 String query = "select m.username, 'HELLO', true from Member m " + "where m.type = :userType"; List result = em.createQuery(query) .setParameter("userType",Member.. 2023. 4. 25.
[JPQL] 페이징, 조인, 서브쿼리 📌 페이징 JPA는 페이징을 다음 두 API로 추상화 setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작) setMaxResults(int maxResult) : 조회할 데이터 수 List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(1) // 0부터 .setMaxResults(10) // 10개씩 .getResultList(); 연결된 데이터베이스 별 SQL이 작성되기 때문에 매우 편리하다. 📌 조인 내부조인(Inner Join) SELECT m FROM Member m [INNER] JOIN m.team t 외부조인(Outer .. 2023. 4. 25.
[JPQL] 객체지향 쿼리 언어 소개 및 JPQL 기본 문법 📌 객체지향 쿼리 언어 소개 JPA는 다양한 쿼리 방법을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL - 소개 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL - 필요성 JPA를 사용하면 엔티티 객체를 중심으로 개발한다. 문제는 검색 쿼리이다. 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색한다. 그렇다고 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다. 결국 애플리케이션이 필요한 데이터만 DB에서 불러오려면 검색 조건이 포함된 SQL.. 2023. 4. 25.
[JPQL] 프로젝션(SELECT) 📌 프로젝션(SELECT) SELECT 절에 조회할 대상을 지정하는 것 프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입) SELECT m FROM Member m → 엔티티 프로젝션 SELECT m.team FROM Member m → 엔티티 프로젝션 SELECT m.address FROM Member m → 임베디드 타입 프로젝션 SELECT m.username, m.age FROM Member m → 스칼라 타입 프로젝션 DISTINCT로 중복 제거 사용 가능 엔티티 프로젝션 - 묵시적 조인 em.createQuery("select m.team from Member m", Team.class).getResultList(); JPQL에는 JOIN절이 없지만 JOIN.. 2023. 4. 25.