goblin
리니팅
goblin

공지사항

전체 방문자
오늘
어제
  • 분류 전체보기 (75)
    • 개발 (31)
      • Spring (12)
      • JPA (4)
      • JAVA (4)
      • Python (6)
      • Docker (1)
      • Error (3)
      • Spring Cloud로 개발하는 MSA (1)
    • 알고리즘 (32)
    • 자료구조 (3)
    • 컴퓨터 개론 (3)
    • 개인 프로젝트 (4)
      • 쇼핑몰 만들기 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • gradle
  • 조합
  • Spring
  • 다이나믹프로그래밍
  • Intellij
  • python
  • 자료구조
  • 코딩테스트
  • 알고리즘
  • inflearn
  • 파이썬
  • JPA
  • 코딩테스트연습
  • 구현
  • 백준
  • 스프링부트
  • 문자열
  • springboot
  • tdd
  • BOJ
  • 파워자바
  • 스프링
  • dp
  • 프로그래머스
  • 객체
  • sorting
  • 클래스
  • 다이나믹 프로그래밍
  • 동적계획법
  • 정렬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
goblin

리니팅

JPA 시작
개발/JPA

JPA 시작

2022. 4. 2. 14:10
728x90

1. 데이터베이스 방언

  • JPA는 특정 데이터베이스에 종속되지 않는다.
  • 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다.
    • 가변 문자 : MySQL - VARCHAR, Oracle - VARCHAR2
    • 페이징 : MySQL - LIMIT, Oracle - ROWNUM
  • 방언은 SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능이다.

 

2. JPA 구동 방식

JPA는 Persistence라는 클래스에서 시작한다.

META-INF/persistence.xml에서 설정 정보를 읽고 EntityManagerFactory라는 클래스를 만든다.

그리고 필요할 때마다 EntityManage를 만들어낸다. 

 

주의 사항

  • EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유한다.
  • EntityManager는 Thread간에 공유하지 않는다.
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행한다. (try~ catch 이용)

 

3. JPQL

JPQL을 한마디로 정의하면 객체 지향 SQL이라고 할 수 있다.

 

JPA를 사용하면 엔티티 객체를 중심으로 개발을 진행한다. 

여기서 문제는 검색 쿼리인데, 검색을 할 때에도 테이블이 아닌 엔티티 객체를 대상으로 검색한다.

모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하고 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. 이를 해결하는 것이 JPQL이다.

 

  • JPA는 SQL을 추상화 한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
  • SQL과 문법이 유사하고 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다.
  • JPQL은 테이블이 아닌 엔티티 객체를 대상으로 쿼리를 작성한다.
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.

 

4. 정리

  • JPA는 항상 EntityManagerFactory를 만들어야 한다.
  • 고객의 요청이 들어올 때 EntityManager를 통해 작업한다.
  • JPA의 모든 데이터 변경은 trasaction 안에서 일어나야 한다. (commit을 꼭 해주고 꼭 닫아줘야 한다.)
  • 웹 앱의 경우 WAS가 풀리면 EntityManagerFactory를 닫아줘야(close) 한다.
  • JPQL은 방언을 바꿔도 현재 데이터베이스에 맞는 적절한 SQL이 나온다.

 

5. 참고

https://www.inflearn.com/course/ORM-JPA-Basic

728x90
반응형

'개발 > JPA' 카테고리의 다른 글

[JPA] Hibernate 그리고 Spring Data JPA  (0) 2024.08.15
[JPA] 영속성 관리  (0) 2022.04.05
JPA란  (0) 2022.03.24
    '개발/JPA' 카테고리의 다른 글
    • [JPA] Hibernate 그리고 Spring Data JPA
    • [JPA] 영속성 관리
    • JPA란
    goblin
    goblin

    티스토리툴바