본문 바로가기
TIL/BackEnd

JPA (Java Persistence API)

by sun_HY 2023. 5. 10.

JPA 탄생 배경

 

SQL 중심적인 개발의 문제점

코드의 반복, SQL에 의존적인 개발
SQL 확인 전까지는 엔티티를 신뢰하기 어려움 (객체들을 서로 join을 통해 계속 묶어줘야 함, NULL값 발생 가능)

 

  • ORM으로 그 문제를 해결하자! (MyBatis, JPA 등)
  • MyBatis의 한계
    • 결국 쿼리를 만드는 건 개발자
    • Oracle을 쓰다가 MySQL을 쓰는 상황 등의 발생 시 쿼리 수정해야 함

 

 

JPA 장점

  • SQL 중심적인 개발에서 객체 중심으로의 개발
  • 생산성, 유지보수
    • 필드 추가 시 SQL은 JPA가 알아서 처리
  • 패러다임의 불일치 해결
  • 데이터 접근 추상화와 벤더 독립성
    • vendor: 여기서는 DB 제품 등을 의미 (Oracle, MySQL 등)
  • 일관성 유지 (표준화)

 


JPA 기초

 

객체 매핑하기

  • @Entity: JPA가 관리할 객체
  • @Id: DB PK와 매핑할 필드

 

persistence.xml

  • JPA 설정 파일
  • 위치: /META-INF/persistence.xml
  • javax.persistence로 시작: JPA 표준 속성
  • hibernate로 시작: hibernate 전용 속성

 

Database dialect

  • JPA는 특정 DB에 종속적이지 않은 기술
  • 각각의 데이터베이스가 제공하는 SQL 문법과 함수 조금씩 다름
  • dialect: SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능

 

JPQL: 객체 지향 쿼리

  • JPA 사용하면 엔티티 객체 중심으로 개발 → 검색 시에도 테이블이 아닌 엔티티 객체 대상 검색
    • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
    • 애플리케이션이 필요한 데이터만 DB에서 불러오려면 검색 조건이 포함된 SQL 필요
  • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
  • SQL과 유사한 문법: SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원
  • JPQL: 엔티티 객체 대상 쿼리 / SQL: 데이터베이스 테이블 대상 쿼리

 

Mapping Annotations

  • @Column
    • 가장 많이 사용
728x90