JPA의 사용방법에 대해

데이터베이스 방언

jpa 사용법을 이야기하기에 앞서 좋은 점 하나를 끄적이고 시작하겠다 이말이야~

데이터베이스에는 방언이라는 놈이 존재해!!

그게 뭐신디!? 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 달라!! (가변문자를 보면 MYSQL : VARCHAR, ORACLE : VARCHAR2)

이처럼 SQL 표준을 지키지 않은 특정 데이터베이스만의 고유한 기능을 방언이라고 하는데 JPA는 이에 종속적이지 않아!!

구체적으로 persistence.xml의 property 중 hibernate.dialect 속성을 통해 원하는 데이터베이스 방언을 선택할 수 있어.

자 그럼 JPA를 어떻게 사용하는지를 한번 보자!!



JPA 구동방식

먼저 JPA 구동방식은 다음과 같애!!

  1. META-INF/persistence.xml 을 읽는다
  2. 읽은 내용을 바탕으로 EntityManagerFactory를 만든다!
  3. EntityManagerFactory를 통해 EntityManger를 찍어낸다!!
  4. EntityManager를 통해 이제 하고싶은 것을 한드아!!

코드로 표현하면 다음과 같애

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence.xml에서 지정한 name");
EntityManger em = emf.createEntityManager();

EntityTransaction tx = em.getTransaction();
tx.begin();

try {
// 각종 코드 ~~~~
// 디비에 데이터를 저장하던 조회하던 등등

tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}

emf.close();

정석으로 하면 위처럼 코드가 되나 실제 사용할 때에는 위의 많은 부분들이 생략돼!! why?? spring이 해준다 이말이야~

JPA가 관리하는 객체를 Entity라고하며 @Entity 어노테이션을 통해 지정해 줄 수 있어!!

1
2
3
4
5
@Entity
public class Example {
@Id
private Long id; // database의 pk와 매핑되는 놈
}

JPA 사용시 주의사항

👏👏 주모오옥!! 주의해야할 것이 있어!!

  • EntityMangerFactory는 하나만 생성해서 어플리케이션 전체에서 공유하는거야
  • EntityManger는 사용하고 바로 버려야해!! 마치 데이터베이스에 접근할 때 커넥션을 얻고 사용 후 바로 버리는 것 처럼!! (쓰레드간에 공유도 당연히 X)
  • JPA의 모든 데이터 변경은 트랜젝션 안에서 실행해야해!! (조회는 그럴 필요가 읎겠찌?)

그럼 다시 이어서~
1
2
//~~~ 위에 팩토리 만들고 EntityManger (em)을 찍어냈을 때
em.persist("여기에는 저장하고자 하는 엔티티");

이런식으로 작성하면 데이터베이스에 insert가 되는거야!! 신기하지??

그런데 만약 조회하는 쿼리나 혹은 그 외에 복잡한 쿼리를 날려야할 경우에는 저러한 방식만으로는 사용할 수 없겠다는 생각이 들지?!!?

→ 그때는 JPQL을 사용하면 돼!!

JPQL은 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리야!! 그냥 객체 지향 SQL이라고 생각하면 될 것 같애. 이 친구는 나중에 따로 다루도록 하게쒀!!







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