3. History (EJB->Hibernate->JPA)
JPA : ORM(Object-relational Mapping) 기술 표준,
EJB 3.0에서 하이버네이트 기반으로 만들어짐.
JPA 1.0(2006) : 초기버전
JPA 2.0(2009) : 대부분의 ORM 기능. JPA
Criteria추가
JPA 2.1 (2013) : 스토어드 프로시저 접근 가능,
컨버터, 엔티티 그래프 기능 추가
5. DB modeling VS Object modeling
모델링의 패러다임 이동 : DB => Object
6. Build application
based on DB modeling
테이블보다 더 많은 객체 생성을 요구.
RDBMS는 객체지향과 거리가 멀다.
JAVA는 객체의 참조를 사용하는 반면 RDBMS는
foreign key를 참조.
객체에 대한 접근은 JAVA 와 RDBMS간 차이가 큼.
테이블 구조 변경시 application에서 할 일이…ㅜㅜ
7. IBATIS VS JPA
Alter table(add column)이 일어난 경우
1. Ibatis : Sql mapper 수정, domain class수정,
business class에서 set 처리 (if 다수의 쿼리와
도메인 클래스가 존재한다면?)
2. JPA : 도메인 수정, 비즈니스 로직 수정…끝! 응?
8. WHY JPA?
반복적인 CRUD를 줄이고 객체지향 설계와 로직에
집중.
반복적인 DB 조회 없이 객체 그래프가 가능.
DBMS Vendor와 관계없이 사용가능 (개발환경 : H2,
유지보수 환경 : Mysql, 실환경 : oracle)
초기 개발이 빠르고 유지보수가 상당히 용이.
Junit의 활용범위가 넓어진다.
9. WHY JPA?
통계 처리보다는 실시간 처리 쿼리에 최적화. 통계
처리 경우 네이티브 SQL를 사용 혹은 IBATIS 를
혼용하여 사용
데이터 접근 추상화와 DBMS 밴더에 대해 독립적
: vendor에 맞는 dialect 사용 => 페이징 방식, 스트링
함수, 날짜 함수 등
13. Entity Manager
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(“Members”);
em = factory.createEntityManager();
Member mem = new Member();
mem.setUserName(“coder”);
mem.setAge(33);
Member selectedMember = em.find(Member.class, id);
15. JPQL
객체지향 쿼리 => 객체를 조회
SQL을 추상화하므로 특정 데이터 베이스에
종속적이지 않음.
Ex)
Query query = em.createQuery(“SELECT m.name, m.age from Member m”);
16. Criteria API
JPQL 의 type-safe 문제해결을 위해서 제공하는 API.
Ex)
CriteriaQuery<Member> cq =
cb.createQuery(Member.class)
cq.from(Member.class).select(m);
17. Native Query
JPQL은 거의 모든 SQL을 지원하지면 특정 DBMS는
JPQL에서 커버가 불가
따라서 해당 DBMS의 네이티브 query 처리하도록 함.
Ex)
Query query = em.createNativeQuery(“SELECT
m.name, m.age from Member m”);