본문 바로가기

Book28

자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (12) 스프링 데이터 JPA 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (12) 스프링 데이터 JPA 12.1 스프링 데이터 JPA 소개 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 기본적인 CRUD 개발 완료할 수 있음 리포지토리 인터페이스의 구현체는 애플리케이션 실행 시점에 스프링 데이터 JPA가 생성해서 주입해준다. 12.1.1 스프링 데이터 프로젝트 스프링 데이터 프로젝트는 JPA, 몽고 디비, 레디스, 하둡 등과 같은 다양한 데이터 저장소에 대한 접근을 추상화해서 개발자 편의를 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여준다. 스프링 데이터 JPA 프로젝트는 JPA에 특화된 기능을 .. 2022. 11. 6.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (10-2) 객체 지향 쿼리 언어 JPQL / Criteria / QueryDSL / 네이티브 SQL / JDBC 직접 사용 / SQL 매퍼에 대한 개념을 정리한다. 10강의 나머지 2편을 정리한다. 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (10-2) 객체 지향 쿼리 언어 10.3 Criteria JPQL을 자바 코드로 작성하도록 도와주는 빌뎌 클래스 API 문자가 아닌 코드로 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성 가능 하다는 장점 하지만 코드가 복잡하고 장황해서 직관적 이해가 떨어지는 단점 10.3.1 Criteria 기초 검색 조건부터 정렬까지 Criteria 빌더를 사용해서 코드를 완성함 쿼리 루트를 만들고 쿼리 루트는 조회의 시작점 10.3.2 C.. 2022. 10. 30.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (10-1) 객체 지향 쿼리 언어 JPQL / Criteria / QueryDSL / 네이티브 SQL / JDBC 직접 사용 / SQL 매퍼에 대한 개념을 정리한다. 10강은 내용이 많아 1편과 2편으로 나눠서 정리한다. 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (10-1) 객체 지향 쿼리 언어 10.1 객체지향 쿼리 소개 ORM을 사용하면 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하여 만들어진 것이 JPQL JPQL 특징 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPA는 JPQL 뿐만 아니라 다양한 검색 방법 제공 JPA가 공식 지원하는 기능 JPQL (Java Pe.. 2022. 10. 5.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (9) 값 타입 JPA에서 다루는 값 타입에 대한 개념을 정리한다. 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (9) 값 타입 값 타입 9.1 기본값 타입 Member -> id -> 식별자 값 // name, age 속성은 식별자 값도 없고 생명주기도 Member 엔티티에 의존함. 엔티티 인스턴스를 제거하면 name, age 값도 제거되므로 값 타입은 공유하면 안됨 9.2 임베디드 타입 (복합 값 타입) JPA에서 임베디드 타입이란 새로운 값 타입을 직접 정의해서 사용하는 것 직접 정의한 임베디드 타입도 int, String과 같이 값 타입이다. 회원 엔티티 정보에서 예를들어 근무 시작일과 우편번호는 서로 아무 관련이 없음 이럴때 @Embedded 을 사용하여 더욱 의미있고 응집력 있게 변경 할 수 있다... 2022. 9. 18.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 들어가며 8강은 1편과 2편으로 나눠 진행하였다. 8.3 지연 로딩 활용 연관된 관계 끼리 자주 함께 사용 -> 즉시 로딩 설정 가끔 사용 -> 지연 로딩 설정 8.3.1 프록시와 컬렉션 래퍼 지연 로딩 설정 시 실제 엔티티 대신 프록시 객체를 사용하며, 프록시 객체는 실제 자신이 사용될 때까지 데이터베이스를 조회하지 않음 하이버네이트는 엔티티를 영속 상태로 만들 때 엔티티에 컬렉션이 있으면 컬렉션을 추적하고 관리할 목적으로 원본 컬렉션을 하이버네이트가 제공하는 내장 컬렉션으로 변경하는데 이것을 컬렉션 래퍼라 함. (출력 결과를 보면 org.hibernate.collection.internal.PersistentBa.. 2022. 9. 10.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-1) 프록시와 연관관계 정리 들어가며 8강은 1편과 2편으로 나눠 진행하였다. 8.1 프록시 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 지연 로딩이라 한다. 그런데 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다. JPA 표준 명세는 지연 로딩의 구현 방법을 JPA 구현체에 위임 -> 하이버네이트 하이버네이트는 지연 로딩을 지원하기 위해 프록시를 사용하는 방법과 바이트코드를 수정하는 두 가지 방법을 제공 8.1.1 프록시 기초 JPA 에서 식별자로 엔티티 하나로 조회할 때 find() 사용 -> 영속성 컨텍스트에 엔티티가 없으면 디비 조회 -> 이렇게 직접 조회하면 조회한 엔티티를 실제 사용하든 하지 않든 데이터베이스를 조.. 2022. 8. 27.