Reference. 자바 ORM 표준 JPA 프로그래밍
책 목차 및 이전 글
더보기
들어가기 전 JPA 특징, Q&A
1. JPA 소개
3. 영속성 관리
4. 엔티티 매핑
4.1 - 4.3 @Entity, @Table, 다양한 매핑
4.4 - 4.5 데이터베이스 스키마 자동 생성, DDL 생성 기능
5. 연관관계 매핑 기초
6. 다양한 연관관계 매핑
7. 고급매핑
8. 프록시와 연관관계 관리
9. 값 타입
9.3~5 값 타입과 불변 객체, 값 비교, 값 타입 컬렉션
10. 객체지향 쿼리 언어
11. 웹 애플리케이션 제작
11.1 프로젝트 환경설정
11.2 도메인 모델과 테이블 설계
11.3 애플리케이션 구현
들어가기 전 (필요성)
- 데이터 접근 계층(Data Access Layer)은 일명 CRUD를 반복해서 개발하는 문제 발생
public class MemberRepository { @PersistenceContext EntityManager em; public void save(Member member) {...} public Member findOne(Long id) {...} public List<Member> findAll() {...} public Member findByUserName(String username) {...} } public class ItemRepository { @PersistenceContext EntityManager em; public void save(Item item) {...} public Item findOne(Long id) {...} public List<Item> findAll() {...} }
- 반복적인 문제를 해결하려면 제네릭과 상속을 적절히 사용해서 공통 부분을 처리하는 부모 클래스 생성해서 처리, 이것을 보통
GenericDAO
라고 부름- 하지만 공통 기능을 구현한 부모 클래스에 너무 종속되며, 상속이 가지는 단점 노출
12.1 스프링 데이터 JPA 소개
- 스프링 프레임워크에서 JPA를 편리하게 사용하도록 지원하는 프로젝트
- 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입
- 데이터 접근 계층을 구현 클래스 없이 인터페이스만 작성해도 개발 완료
public interface MemberRepository extends JpaRepository<Member, Long> { Member findByUsername(String username); } public interface ItemRepository extends JpaRepository<Item, Long> { }
- findByUsername처럼 직접 작성한 메소드도 이름을 분석해서 JPQL을 실행
select m from Member m where username = :username
- findByUsername처럼 직접 작성한 메소드도 이름을 분석해서 JPQL을 실행
12.1.1 스프링 데이터 프로젝트
- 스프링 데이터 JPA는 스프링 데이터 프로젝트의 하위 프로젝트 중 하나
- 스프링 데이터 프로젝트는
JPA
,몽고DB,
NEO4J
,REDIS
,HADOOP
,GEMFIRE
같은 다양한 데이터 저장소에 대한 접근을 추상화해서 개발자의 편의를 제공하고 반복 데이터 접근 코드를 줄임
- 스프링 데이터 JPA 프로젝트는 JPA 특화된 기능을 제공
- 스프링 프레임워크와 JPA를 함께 사용한다면 JPA 사용을 적극 추천
12.3 공통 인터페이스 기능
- 스프링 데이터 JPA는 간단한 CRUD 기능을 공통으로 처리하는 JpaRepository 인터페이스를 제공
public interface JpaRepositry<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> { ... }
- JpaRepository에 제네릭에 엔티티 클래스와 엔티티 클래스가 사용하는 식별자 타입을 지정
public interface MemberRepository extends JpaRepository<Member, Long> { }
JpaRepository 인터페이스 계층 구조
- Repository, CrudRepository, PagingAndSortingRepositry는 스프링 데이터 프로젝트가 공통으로 사용하는 인터페이스
- JpaRepository는 스프링 데이터 JPA가 제공하는 특화된 기능을 제공
JpaRepository가 제공하는 주요 메소드 몇 가지
참고로 T는 엔티티, ID는 엔티티의 식별자 타입, S는 엔티티와 그 자식 타입을 의미
save(S)
: 새로운 엔티티는 저장하고 이미 있는 엔티티는 수정- 엔티티에 식별자 값이 없으면
persist()
, 식별자 값이 있으면merge()
를 호출
- 엔티티에 식별자 값이 없으면
delete(T)
: 엔티티 하나를 삭제, 내부에서EntityManager.remove()
를 호출
findOne(ID)
: 엔티티 하나를 조회, 내부에서EntityManager.find()
를 호출
getOne(ID)
: 엔티티를 프록시로 조회, 내부에서EntityManager.getReference()
를 호출
findAll(...)
: 모든 엔티티를 조회, 정렬이나 페이징 조건을 파라미터로 제공
'개발서적 > 자바 ORM 표준 JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 12.5~10 명세, 사용자 정의 리포지토리, Web 확장... (0) | 2021.09.21 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 12.4 쿼리 메소드 기능 (0) | 2021.09.21 |
[자바 ORM 표준 JPA 프로그래밍] 10.6 객체지향 쿼리 심화 (0) | 2021.09.13 |
[자바 ORM 표준 JPA 프로그래밍] 10.5 네이티브 SQL (0) | 2021.09.13 |
[자바 ORM 표준 JPA 프로그래밍] 10.4 QueryDSL (0) | 2021.09.13 |