본문 바로가기

공부일기/JPA16

JPA 공부일기(15) [자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 10. 객체지향 쿼리 언어1 - 기본 문법: 페이징~ JPQL 함수 페이징 - JPA는 페이징을 두 api로 추상화 - setFirstResult(int): 조회 시작 위치, setMaxResults(int): 조회할 데이터 수 ex) String jpql = "select m from Member m order by m.name desc"; List resultList = em.createQuery(jpql, Member.class).setFirstResult(10).setMaxResults(20).getResultList(); ON절을 활용한 조인 1. 조인 대상 필터링 • ex) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인 JPQL: S.. 2023. 4. 4.
JPA 공부일기(14) [자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 10. 객체지향 쿼리 언어1 - 기본 문법: 기본문법과 쿼리 API~프로젝션 JPQL 기본문법과 쿼리API - 엔티티와 속성은 대소문자 구분O (Member, age) - JPQL 키워드는 대소문자 구분X (SELECT, FROM, where) - 엔티티 이름 사용, 테이블 이름이 아님(Member) - 별칭은 필수(m) (as는 생략가능) - 집합, 정렬 가능. - TypedQuery: 반환 타입이 명확할 때 사용/ Query: 반환 타입이 명확하지 않을 때 사용. - 결과조회 API: query.getResultList(): 결과가 하나 이상일 때 리스트 반환.(결과가 없으면 빈 리스트 반환.) / query.getSingleResult(): 결.. 2023. 3. 27.
JPA 공부일기(13) [자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 10. 객체지향 쿼리 언어1 - 기본 문법: 소개 JPA는 다양한 쿼리 방법을 지원 → JPQL, JPA Criteria, QueryDSL, Native Sql, JDBC API 직접 사용, SpringJdbcTemplate, MyBatis와 함께 사용 JPQL - JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리언어 제공. - JPQL은 엔티티 객체를 대상으로 쿼리, SQL은 데이터베이스 테이블을 대상으로 쿼리. - SQL을 추상화해서 특정 데이터베이스 SQL에 의존x. Criteria - 문자열이 아닌 자바코드로 JPQL을 작성할 수 있음. - JPQL 빌더역할. - JPA 공식기능. - 장점: 동적 쿼리 작성 편리. 컴파일 시점에 문법 .. 2023. 3. 26.
JPA 공부일기(12) [자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 9.값타입- 값타입과 불변 객체 ~ 실전 예제6- 값 타입 매핑 값 타입 공유 참조 - 임베디트 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험. side effect 발생. -> 대신 값을 복사해서 사용. - 직접 정의한 값 타입은 자바의 기본 타입이 아닌 객체 타입. 불변 객체 - 불변 객체: 생성 시점 이후 절대 값을 변경할 수 없는 객체. - 객체 타입을 수정할 수 없게 만들면 side effect 원천 차단. ①생성자로만 값을 설정하고 수정자(setter)를 만들지 않음. ②private로 설정. 값 타입 컬렉션 - 값 타입을 하나 이상 저장할 때(컬렉션을 저장할 때) 사용. - @ElementCollection, @CollectionT.. 2023. 3. 21.
JPA 공부일기(11) [자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 9.값타입- 기본값 타입 ~ 임베디드 타입 엔티티 타입: @Entity로 정의하는 객체. 데이터가 변해도 식별자로 지속해서 추적 가능. 값 타입: 단순히 값으로 사용하는 자바 기본타입이나 객체. 식별자가 없고 값만 있어 변경시 추적 불가. 종류 - 기본값 타입, 임베디드 타입, 컬렉션 값 타입 기본값 타입 - ex) String name, int age - 생명주기를 엔티티에 의존. - 값 타입은 공유하면 x. (참고: 자바에서 int, double과 같은 primitive type은 공유x, 값을 복사. Interger 같은 래퍼 클래스나 String같은 특수 클래스는 공유o, 값 변경x.) 임베디드 타입 - 새로운 값 타입을 직접 정의. (ex... 2023. 3. 20.
JPA 공부일기(10) [자바 ORM 표준 JPA 프로그래밍 - 기본편] 섹션 8.프록시와 연관관계 정리- 즉시로딩과 지연로딩 ~ 실전예제5. 연관관계 관리 즉시로딩과 지연로딩 - 지연로딩: fetch=FetchType.LAZY를 사용해 프록시로 조회. 실제 객체를 사용하는 시점에 DB를 조회해서 초기화. - 즉시로딩: fetch=FetchType.EAGER를 사용해 한번에 조회. - 실무에서 지연로딩만 사용해야 함. 즉시로딩은 예상하지 못한 sql 발생(JPQL에서 N+1 문제 발생). - @ManyToOne, @OneToOne은 기본이 즉시 로딩이므로 LAZY로 설정(@OneToMany, @ManyToMany는 기본이 지연로딩). 영속성 전이 (cascade=CascadeType.종류) - 특정 엔티티를 영속 상태로 만들 .. 2023. 2. 9.