데이터베이스 방언
jpa 사용법을 이야기하기에 앞서 좋은 점 하나를 끄적이고 시작하겠다 이말이야~
데이터베이스에는 방언이라는 놈이 존재해!!
그게 뭐신디!? 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 달라!! (가변문자를 보면 MYSQL : VARCHAR, ORACLE : VARCHAR2)
이처럼 SQL 표준을 지키지 않은 특정 데이터베이스만의 고유한 기능을 방언이라고 하는데 JPA는 이에 종속적이지 않아!!
구체적으로 persistence.xml의 property 중 hibernate.dialect 속성을 통해 원하는 데이터베이스 방언을 선택할 수 있어.
자 그럼 JPA를 어떻게 사용하는지를 한번 보자!!
JPA 구동방식
먼저 JPA 구동방식은 다음과 같애!!
- META-INF/persistence.xml 을 읽는다
- 읽은 내용을 바탕으로 EntityManagerFactory를 만든다!
- EntityManagerFactory를 통해 EntityManger를 찍어낸다!!
- EntityManager를 통해 이제 하고싶은 것을 한드아!!
코드로 표현하면 다음과 같애
1 | EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence.xml에서 지정한 name"); |
정석으로 하면 위처럼 코드가 되나 실제 사용할 때에는 위의 많은 부분들이 생략돼!! why?? spring이 해준다 이말이야~
JPA가 관리하는 객체를 Entity라고하며 @Entity 어노테이션을 통해 지정해 줄 수 있어!!
1 |
|
JPA 사용시 주의사항
👏👏 주모오옥!! 주의해야할 것이 있어!!
- EntityMangerFactory는 하나만 생성해서 어플리케이션 전체에서 공유하는거야
- EntityManger는 사용하고 바로 버려야해!! 마치 데이터베이스에 접근할 때 커넥션을 얻고 사용 후 바로 버리는 것 처럼!! (쓰레드간에 공유도 당연히 X)
- JPA의 모든 데이터 변경은 트랜젝션 안에서 실행해야해!! (조회는 그럴 필요가 읎겠찌?)
그럼 다시 이어서~
1 | //~~~ 위에 팩토리 만들고 EntityManger (em)을 찍어냈을 때 |
이런식으로 작성하면 데이터베이스에 insert가 되는거야!! 신기하지??
그런데 만약 조회하는 쿼리나 혹은 그 외에 복잡한 쿼리를 날려야할 경우에는 저러한 방식만으로는 사용할 수 없겠다는 생각이 들지?!!?
→ 그때는 JPQL을 사용하면 돼!!
JPQL은 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리야!! 그냥 객체 지향 SQL이라고 생각하면 될 것 같애. 이 친구는 나중에 따로 다루도록 하게쒀!!