본문 바로가기

JPA22

[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.
[JPA] 값 타입 🎈 JPA의 데이터 타입 분류 JPA의 데이터 타입 분류는 크게 엔티티 타입과 값 타입 두가지이다. 엔티티 타입 @Entity로 정의하는 객체로 타입들을 PK로 관리하기 때문에 데이터가 변해도 식별자로 지속해서 추적이 가능하다. ex. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 ex. 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 🎈 기본값 타입 자바 원시 타입(int, double) 래퍼 클래스(Integer, Long) String 기본값 타입의 특징은 생명주기들이 엔티티의 의존하는 것이다. 예를 들면 회원을 삭제하면 이름, 나.. 2023. 4. 22.