JPA(Java Persistence API)
JPA란?
관계형 데이터베이스에 접근하기 위한 표준
ORM(Object-relational Mapping) 기술을 제공하여 기존
EJB 기술을 대체하는 기술.
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) : 스토어드 프로시저 접근 가능,
컨버터, 엔티티 그래프 기능 추가
Architecture
MemberDAO
JPA
MySQL
API
Oracle
API
H2
JPQL
API DBMS
persist
find
result
Insert
select
resultSet
DB modeling VS Object modeling
모델링의 패러다임 이동 : DB => Object
Build application
based on DB modeling
테이블보다 더 많은 객체 생성을 요구.
RDBMS는 객체지향과 거리가 멀다.
JAVA는 객체의 참조를 사용하는 반면 RDBMS는
foreign key를 참조.
객체에 대한 접근은 JAVA 와 RDBMS간 차이가 큼.
테이블 구조 변경시 application에서 할 일이…ㅜㅜ
IBATIS VS JPA
Alter table(add column)이 일어난 경우
1. Ibatis : Sql mapper 수정, domain class수정,
business class에서 set 처리 (if 다수의 쿼리와
도메인 클래스가 존재한다면?)
2. JPA : 도메인 수정, 비즈니스 로직 수정…끝! 응?
WHY JPA?
반복적인 CRUD를 줄이고 객체지향 설계와 로직에
집중.
반복적인 DB 조회 없이 객체 그래프가 가능.
DBMS Vendor와 관계없이 사용가능 (개발환경 : H2,
유지보수 환경 : Mysql, 실환경 : oracle)
초기 개발이 빠르고 유지보수가 상당히 용이.
Junit의 활용범위가 넓어진다.
WHY JPA?
통계 처리보다는 실시간 처리 쿼리에 최적화. 통계
처리 경우 네이티브 SQL를 사용 혹은 IBATIS 를
혼용하여 사용
데이터 접근 추상화와 DBMS 밴더에 대해 독립적
: vendor에 맞는 dialect 사용 => 페이징 방식, 스트링
함수, 날짜 함수 등
Life cycle of Persistence
Context
Entity Manager
Entity Manager Factory : entity manager를 생성
Entity manager : request or session당 persistence
관리. (persist, find, flush등)
Entity Transaction : commit 시 persistence area의
내용이 반영
Entity Manager
Architecture
DBMS
persist
Entity_1
Entity_1
Cache
SQL repository
Store entity
Generate SQL
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);
Entity
@Entity
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "age", nullable = false)
private Integer age;
@Enumerated(EnumType.STRING)
private ActiveType activeType;
@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name="DEPT_ID“)
private Dept dept;
JPQL
객체지향 쿼리 => 객체를 조회
SQL을 추상화하므로 특정 데이터 베이스에
종속적이지 않음.
Ex)
Query query = em.createQuery(“SELECT m.name, m.age from Member m”);
Criteria API
JPQL 의 type-safe 문제해결을 위해서 제공하는 API.
Ex)
CriteriaQuery<Member> cq =
cb.createQuery(Member.class)
cq.from(Member.class).select(m);
Native Query
JPQL은 거의 모든 SQL을 지원하지면 특정 DBMS는
JPQL에서 커버가 불가
따라서 해당 DBMS의 네이티브 query 처리하도록 함.
Ex)
Query query = em.createNativeQuery(“SELECT
m.name, m.age from Member m”);
QueryDSL
Sample project 참조
Spring data JPA
Repository(interface)로 단순화
Web project template
Based on Spring Boot
Based on Vaadin + spring data JPA
Web project framework
Test Driven Development(JUnit)
Next Seminar (two per month)
Vaadin + Spring data JPA
Rabbit MQ
Google Polymer

Java JPA

  • 2.
    JPA(Java Persistence API) JPA란? 관계형데이터베이스에 접근하기 위한 표준 ORM(Object-relational Mapping) 기술을 제공하여 기존 EJB 기술을 대체하는 기술.
  • 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) : 스토어드 프로시저 접근 가능, 컨버터, 엔티티 그래프 기능 추가
  • 4.
  • 5.
    DB modeling VSObject modeling 모델링의 패러다임 이동 : DB => Object
  • 6.
    Build application based onDB modeling 테이블보다 더 많은 객체 생성을 요구. RDBMS는 객체지향과 거리가 멀다. JAVA는 객체의 참조를 사용하는 반면 RDBMS는 foreign key를 참조. 객체에 대한 접근은 JAVA 와 RDBMS간 차이가 큼. 테이블 구조 변경시 application에서 할 일이…ㅜㅜ
  • 7.
    IBATIS VS JPA Altertable(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 사용 => 페이징 방식, 스트링 함수, 날짜 함수 등
  • 10.
    Life cycle ofPersistence Context
  • 11.
    Entity Manager Entity ManagerFactory : entity manager를 생성 Entity manager : request or session당 persistence 관리. (persist, find, flush등) Entity Transaction : commit 시 persistence area의 내용이 반영
  • 12.
  • 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);
  • 14.
    Entity @Entity public class User{ @Id @GeneratedValue(strategy= GenerationType.AUTO) private Long id; @Column(name = "name", nullable = false) private String name; @Column(name = "age", nullable = false) private Integer age; @Enumerated(EnumType.STRING) private ActiveType activeType; @ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL) @JoinColumn(name="DEPT_ID“) private Dept dept;
  • 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”);
  • 18.
  • 19.
  • 20.
    Web project template Basedon Spring Boot Based on Vaadin + spring data JPA Web project framework Test Driven Development(JUnit)
  • 21.
    Next Seminar (twoper month) Vaadin + Spring data JPA Rabbit MQ Google Polymer