Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 2.5 KB

[승재] 2장.md

File metadata and controls

49 lines (39 loc) · 2.5 KB

JPA 시작

매핑 어노테이션

  1. @Entity -> 이 클래스를 테이블과 매핑한다고 JPA에게 알림
  2. @Table -> 엔티티 클래스에 매핑할 테이블 정보를 알림
  3. @Id -> 엔티티 클래스의 필드를 테이블의 기본 키(PK)에 매핑
  4. @Column -> 필드를 컬럼에 매핑

데이터베이스 방언

SQL 표준을 지키지 않거나 특정 데이터 베이스만의 고유한 기능

  1. 데이터 타입
  2. 다른 변수명
  3. 페이징 처리
  • 이 문제를 해결하기 위해 JPA는 다양한 데이터베이스 방언 클래스 제공!
  • JPA가 제공하는 표준 문법에 맞추어 사용하면 데이터 베이스에 의존적인 SQL은 데이터베이스 방언이 처리.

엔티티 매니저 설정

엔티티 매니저 팩토리

  • 설정 정보를 읽어서 JPA를 동작시키기 위한 기반 객체를 만들고 JPA 구현체에 따라서 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리 생성 비용은 매우 크다.

  • 따라서 엔티티 매니저 팩토리는 어플리케이션 전체에서 한 번만 생성하고 공유해서 사용.

엔티티 매니저

  • 엔티티 매니저 팩토리에서 엔티티 매니저 생성.
  • JPA의 기능 대대분은 엔티티 매니저가 제공.
  • 내부에 데이터소스(데이터베이스 커넥션)을 유지하면서 데이터베이스와 통신
  • 데이터베이스 커넥션과 밀접한 관계가 있으므로 쓰레드 간에 공유하거나 재사용X

트랜잭션

  • JPA를 사용시 항상 트랜잭션 안에서 데이터를 변경해야 한다.

JPQL

검색 쿼리에 경우 JPA는 엔티티 객체를 중심으로 개발하기에 엔티티 객체를 대상으로 검색을 해야한다. 하지만 이것은 매우 힘든 일이다. 그렇기에 어플리케이션이 필요한 데이터만 데이터베이스에서 불러오려면 SQL문이 필요하다. 이런 상황을 해결하기 위해 JPA는 JPQL(Java Persistence Query Language)라는 쿼리 언어를 제공한다. JPQL이란 SQL을 추상황한 객체지향 쿼리언어이다.

JPQL vs SQL

  1. JPQL은 엔티티 객체를 대상으로 쿼리 -> 클래스와 필드 대상으로 쿼리
  2. SQL은 데이터베이스 테이블을 대상으로 쿼리
  • JPQL은 데이터베이스 테이블을 전혀 알지 못한다! JPQL에서 다루는 것은 테이블이 아닌 엔티티 객체이다!

  • JPA는 JPQL을 분석 -> 적절한 SQL을 만들어서 데이터베이스에서 데이터 조회