자바 ORM 표준 JPA 프로그래밍
저자

김영한

저자:김영한
SI에서다양한프로젝트를수행하고,J2EE강사와다음커뮤니케이션을거쳐현재SK플래닛의데이터서비스개발팀에서근무하고있다.도메인주도설계에관심이많으며,끊임없이공부하고더나은?코드를작성하는개발자가되려고노력중이다.

목차

1장.JPA소개
1.1SQL과문제점
1.1.1반복,반복그리고반복
1.1.2SQL에의존적인개발
1.1.3JPA와문제해결
1.2패러다임의불일치
1.2.1상속
1.2.2연관관계
1.2.3객체그래프탐색
1.2.4비교
1.2.5정리
1.3JPA란무엇일까?
1.3.1JPA소개
1.3.2왜JPA를사용해야하는가?
1.4정리

2장.JPA시작
2.1이클립스설치와프로젝트불러오기
2.2H2데이터베이스설치
2.3라이브러리와프로젝트구조
2.3.1메이븐과사용라이브러리관리
2.4객체매핑시작
2.5persistence.xml설정
2.5.1데이터베이스방언
2.6애플리케이션개발
2.6.1엔티티매니저설정
2.6.2트랜잭션관리
2.6.3비즈니스로직
2.6.4JPQL
2.7정리

3장.영속성관리
3.1엔티티매니저팩토리와엔티티매니저
3.2영속성컨텍스트란?
3.3엔티티의생명주기
3.4영속성컨텍스트의특징
3.4.1엔티티조회
3.4.2엔티티등록
3.4.3엔티티수정
3.4.4엔티티삭제
3.5플러시
3.5.1플러시모드옵션
3.6준영속
3.6.1엔티티를준영속상태로전환:detach()
3.6.2영속성컨텍스트초기화:clear()
3.6.3영속성컨텍스트종료:close()
3.6.4준영속상태의특징
3.6.5병합:merge()
3.7정리

4장.엔티티매핑
4.1@Entity
4.2@Table
4.3다양한매핑사용
4.4데이터베이스스키마자동생성
4.5DDL생성기능
4.6기본키매핑
4.6.1기본키직접할당전략
4.6.2IDENTITY전략
4.6.3SEQUENCE전략
4.6.4TABLE전략
4.6.5AUTO전략
4.6.6기본키매핑정리
4.7필드와컬럼매핑:레퍼런스
4.7.1@Column
4.7.2@Enumerated
4.7.3@Temporal
4.7.4@Lob
4.7.5@Transient
4.7.6@Access
4.8정리

실전예제1.요구사항분석과기본매핑
요구사항분석
도메인모델분석
테이블설계
엔티티설계와매핑
데이터중심설계의문제점

5장.연관관계매핑기초
5.1단방향연관관계
5.1.1순수한객체연관관계
5.1.2테이블연관관계
5.1.3객체관계매핑
5.1.4@JoinColumn
5.1.5@ManyToOne
5.2연관관계사용
5.2.1저장
5.2.2조회
5.2.3수정
5.2.4연관관계제거
5.2.5연관된엔티티삭제
5.3양방향연관관계
5.3.1양방향연관관계매핑
5.3.2일대다컬렉션조회
5.4연관관계의주인
5.4.1양방향매핑의규칙:연관관계의주인
5.4.2연관관계의주인은외래키가있는곳
5.5양방향연관관계저장
5.6양방향연관관계의주의점
5.6.1순수한객체까지고려한양방향연관관계
5.6.2연관관계편의메소드
5.6.3연관관계편의메소드작성시주의사항
5.7정리

실전예제2.연관관계매핑시작
일대다,다대일연관관계매핑
객체그래프탐색

6장.다양한연관관계매핑
6.1다대일
6.1.1다대일단방향[N:1]
6.1.2다대일양방향[N:1,1:N]
6.2일대다
6.2.1일대다단방향[1:N]
6.2.2일대다양방향[1:N,N:1]
6.3일대일[1:1]
6.3.1주테이블에외래키
6.3.2대상테이블에외래키
6.4다대다[N:N]
6.4.1다대다:단방향
6.4.2다대다:양방향
6.4.3다대다:매핑의한계와극복,연결엔티티사용
6.4.4다대다:새로운기본키사용
6.4.5다대다연관관계정리
6.5정리

실전예제3.다양한연관관계매핑
일대일매핑
다대다매핑

7장.고급매핑
7.1상속관계매핑
7.1.1조인전략
7.1.2단일테이블전략
7.1.3구현클래스마다테이블전략
7.2@MappedSuperclass
7.3복합키와식별관계매핑
7.3.1식별관계vs비식별관계
7.3.2복합키:비식별관계매핑
7.3.3복합키:식별관계매핑
7.3.4비식별관계로구현
7.3.5일대일식별관계
7.3.6식별,비식별관계의장단점
7.4조인테이블
7.4.1일대일조인테이블
7.4.2일대다조인테이블
7.4.3다대일조인테이블
7.4.4다대다조인테이블
7.5엔티티하나에여러테이블매핑
7.6정리

실전예제4.상속관계매핑
상속관계매핑
@MappedSuperclass매핑

8장.프록시와연관관계관리
8.1프록시
8.1.1프록시기초
8.1.2프록시와식별자
8.1.3프록시확인
8.2즉시로딩과지연로딩
8.2.1즉시로딩
8.2.2지연로딩
8.2.3즉시로딩,지연로딩정리
8.3지연로딩활용
8.3.1프록시와컬렉션래퍼
8.3.2JPA기본페치전략
8.3.3컬렉션에FetchType.EAGER사용시주의점
8.4영속성전이-CASCADE
8.4.1영속성전이:저장
8.4.2영속성전이:삭제
8.4.3CASCADE의종류
8.5고아객체
8.6영속성전이+고아객체,생명주기
8.7정리

실전예제5.연관관계관리
글로벌페치전략설정
영속성전이설정

9장.값타입
9.1기본값타입
9.2임베디드타입(복합값타입)
9.2.1임베디드타입과테이블매핑
9.2.2임베디드타입과연관관계
9.2.3@AttributeOverride:속성재정의
9.2.4임베디드타입과null
9.3.값타입과불변객체
9.3.1값타입공유참조
9.3.2값타입복사
9.3.3불변객체
9.4.값타입의비교
9.5.값타입컬렉션
9.5.1값타입컬렉션사용
9.5.2값타입컬렉션의제약사항
9.6정리

실전예제6.값타입매핑
실전예제정리

10장.객체지향쿼리언어
10.1객체지향쿼리소개
10.1.1JPQL소개
10.1.2Criteria쿼리소개
10.1.3QueryDSL소개
10.1.4네이티브SQL소개
10.1.5JDBC직접사용,마이바티스같은SQL매퍼프레임워크사용
10.2JPQL
10.2.1기본문법과쿼리API
10.2.2파라미터바인딩
10.2.3프로젝션
10.2.4페이징API
10.2.5집합과정렬
10.2.6JPQL조인
10.2.7페치조인
10.2.8경로표현식
10.2.9서브쿼리
10.2.10조건식
10.2.11다형성쿼리
10.2.12사용자정의함수호출(JPA2.1)
10.2.13기타정리
10.2.14엔티티직접사용
10.2.15Named쿼리:정적쿼리
10.3Criteria
10.3.1Criteria기초
10.3.2Criteria쿼리생성
10.3.3조회
10.3.4집합
10.3.5정렬
10.3.6조인
10.3.7서브쿼리
10.3.8IN식
10.3.9CASE식
10.3.10파라미터정의
10.3.11네이티브함수호출
10.3.12동적쿼리
10.3.13함수정리
10.3.14Criteria메타모델API
10.4QueryDSL
10.4.1QueryDSL설정
10.4.2시작
10.4.3검색조건쿼리
10.4.4결과조회
10.4.5페이징과정렬
10.4.6그룹
10.4.7조인
10.4.8서브쿼리
10.4.9프로젝션과결과반환
10.4.10수정,삭제배치쿼리
10.4.11동적쿼리
10.4.12메소드위임
10.4.13QueryDSL정리
10.5네이티브SQL
10.5.1네이티브SQL사용
10.5.2Named네이티브SQL
10.5.3네이티브SQLXML에정의
10.5.4네이티브SQL정리
10.5.5스토어드프로시저(JPA2.1)
10.6객체지향쿼리심화
10.6.1벌크연산
10.6.2영속성컨텍스트와JPQL
10.6.3JPQL과플러시모드
10.7정리

11장.웹애플리케이션제작
11.1프로젝트환경설정
11.1.1프로젝트구조
11.1.2메이븐과사용라이브러리관리
11.1.3스프링프레임워크설정
11.2도메인모델과테이블설계
11.2.1요구사항분석
11.2.2도메인모델설계
11.2.3테이블설계
11.2.4연관관계정리
11.2.5엔티티클래스
11.3애플리케이션구현
11.3.1개발방법
11.3.2회원기능
11.3.3상품기능
11.3.4주문기능
11.3.5웹계층구현
11.4정리

12장.스프링데이터JPA
12.1스프링데이터JPA소개
12.1.1스프링데이터프로젝트
12.2스프링데이터JPA설정
12.3공통인터페이스기능
12.4쿼리메소드기능
12.4.1메소드이름으로쿼리생성
12.4.2JPANamedQuery
12.4.3@Query,리파지토리메소드에쿼리정의
12.4.4파라미터바인딩
12.4.5벌크성수정쿼리
12.4.6반환타입
12.4.7페이징과정렬
12.4.8힌트
12.4.9Lock
12.5Specifications(명세)
12.6사용자정의리파지토리구현
12.7Web확장
12.7.1설정
12.7.2도메인클래스컨버터기능
12.7.3페이징과정렬기능
12.8스프링데이터JPA가사용하는구현체
12.9JPA샵에적용
12.9.1환경설정
12.9.2리파지토리리팩토링
12.9.3명세적용
12.10스프링데이터JPA와QueryDSL통합
12.10.1QueryDslPredicateExecutor사용
12.10

출판사 서평

★이책에서다루는내용★

■JPA기초이론과핵심원리
■JPA로도메인모델을설계하는과정을예제중심으로설명
■다양한객체지향쿼리언어설명
■JPA와스프링프레임워크를함께사용해서웹애플리케이션을개발하는방법
■스프링데이터JPA,QueryDSL소개및활용
■실무에서JPA를사용할때성능을최적화하는다양한방법

★이책의대상독자★

이책은JPA를사용해서엔터프라이즈애플리케이션을개발하려는모든자바개발자를대상으로한다.이책의내용을이해하려면자바언어와JDBC를사용한데이터베이스프로그래밍,그리고객체지향프로그래밍과관계형데이터베이스에대해어느정도알고있어야한다.추가로3부는웹개발과스프링프레임워크에대한기초지식이필요하며JUnit을다룰수있어야한다.그리고예제코드를실행하려면메이븐에대해서도약간의지식이필요하다.

★이책의구성★

JPA는크게객체와테이블을어떻게매핑해야하는지에관한설계부분과설계한모델을실제사용하는부분으로나눌수있다.책의앞부분에서는기초이론과설계방법을학습하고뒷부분에서는학습한이론을바탕으로JPA를활용해서실제웹애플리케이션을개발한다.

이책은크게네부분으로나뉘어있다.

1장에서9장은이론편이다.객체와테이블을매핑하는방법과JPA의핵심기능들을알아본다.4장부터9장까지는각장의마지막에점진적으로도메인모델을설계해나가는실전예제가있어서학습한내용을실제로적용해볼수있게했다.

10장은객체지향쿼리언어에대한내용이다.JPA가제공하는객체지향쿼리언어인JPQL(JavaPersistenceQueryLanguage)부터직접SQL을작성하는네이티브SQL까지알아본다.

11장과12장은실무에서JPA를사용하기위한활용편이다.스프링프레임워크와JPA를사용해서어떻게웹애플리케이션을개발하는지학습하고스프링데이터JPA와QueryDSL이라는혁신적인오픈소스도사용해본다.
13장에서16장은트랜잭션과락,캐시,성능최적화등JPA의다양한고급주제들을다룬다.

★온라인강의★

지금까지다양한실무프로젝트에JPA를도입했다.작게는단순한웹서비스부터크게는조단위의거래금액을처리하는주문,결제,정산시스템까지JPA로직접설계하고개발했다.JPA를처음실무에도입할때는좌충우돌했지만,개발생산성과유지보수가확연히좋아졌고코드품질과테스트에더많은시간을할애할수있었다.무엇보다JPA를사용해본동료들은이전으로돌아가고싶어하지않아했다.하지만JPA에관한국내자료가부족해어려움이많았다.그래서2015년직접이책을썼다.
책과함께볼수있는유료온라인강의를제공한다.책을출간한뒤네이버,카카오와같은인터넷비즈니스회사부터우아한형제들,11번가등e커머스회사까지JPA를사용중이거나도입하려는많은회사에서강연했다.책에서이해하기어렵던부분을강의를통해쉽게이해했다는개발자들의이야기를듣고온라인강의를개설했다.참고로강의는최신버전의스프링부트와JPA를사용하고,코드로쉽게따라할수있다.그리고실무노하우를전달하는데더많은초점을맞췄다.
여러분도실무에서JPA를자신있게활용할수있기를바란다.