[JPA] JPA 시작하기

Swim Lee·2021년 1월 26일
4

JPA

목록 보기
3/10
post-thumbnail

데이터베이스 방언

  • JPA는 특정 데이터베이스에 종속적이지 않도록 설계
  • 각각의 데이터베이스가 제공하는 SQL문법과 함수는 서로 조금씩 다르다 😫
    • 가변 문자 : MySQL은 VARCHAR, Oracle은 VARCHAR2
    • 문자열 자르는 함수 : SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()
    • 페이징 : MySQL은 LIMIT, Oracle은 ROWNUM
  • 방언 : 위의 예시와 같이 SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

JPA는 사용하는 DB Dialect에 따라 알맞은 SQL을 생성해준다!

현업에서 사용할 수 있는 DB는 거의 다 방언이 있다고 생각하면된다!

JPA 구동 방식

  • JPA는 Persistence라는 클래스가 있다.
  • Persistence에서 persistence.xml 설정 정보를 읽어서 EntityMangerFactory객체를 생성해준다.
  • EntityMangerFactory에서 필요할 때마다 EntityManger를 생성해서 사용.

객체와 테이블 생성하고 매핑하기

@Entity
public class Member {
    
    @Id
    private Long id;
    private String name;
    
    //Getter, Setter ...
}

CREATE TABLE MEMBER (
    ID BIGINT NOT NULL,
    NAME VARCHAR(255),
    PRIMARY KEY (ID)
);
  • @Entity : JPA가 관리할 객체
  • @Id : 데이터베이스의 PK와 매핑

주의

  • 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유한다! (웹서버가 올라올 시점에 딱 하나만 생성 [DB당 하나만 생성])
  • 엔티티 매니저는 쓰레드간에 공유하면 안된다! (사용하고 버려야한다!)
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행해야한다!

JPQL

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

해당 게시글은 인프런 김영한님의 <자바 ORM 표준 JPA 프로그래밍 - 기본편>을 듣고 정리한 내용입니다.

profile
백엔드 꿈나무 🐥

0개의 댓글