SlideShare uma empresa Scribd logo
1 de 21
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

Mais conteúdo relacionado

Mais procurados

DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaYounghan Kim
 
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)visual khh
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpaTaesin Um
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로Dongmin Shin
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정Javajigi Jaesung
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10hungrok
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis BasicJi-Woong Choi
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기JangHyuk You
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)명석 고
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
9 object class
9 object class9 object class
9 object class웅식 전
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제정완 전
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 

Mais procurados (20)

DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
 
Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)Hibernate start (하이버네이트 시작하기)
Hibernate start (하이버네이트 시작하기)
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
9 object class
9 object class9 object class
9 object class
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 

Destaque

[강의소개] 안드로이드 앱 개발 입문 캠프 4기
[강의소개] 안드로이드 앱 개발 입문 캠프 4기[강의소개] 안드로이드 앱 개발 입문 캠프 4기
[강의소개] 안드로이드 앱 개발 입문 캠프 4기FAST CAMPUS
 
Binding business data to vaadin components
Binding business data to vaadin componentsBinding business data to vaadin components
Binding business data to vaadin componentsPeter Lehto
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3plusperson
 
자바 8 스트림 API
자바 8 스트림 API자바 8 스트림 API
자바 8 스트림 APINAVER Corp
 
대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균beom kyun choi
 
JPA 프로그래밍 (1)
JPA 프로그래밍 (1)JPA 프로그래밍 (1)
JPA 프로그래밍 (1)Bryan Choi
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기beom kyun choi
 
React 소개 및 구현방법 Demo
React 소개 및 구현방법 DemoReact 소개 및 구현방법 Demo
React 소개 및 구현방법 DemoDaesung Kim
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30Donghan Kim
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
Things Factory Introduction (한글)
Things Factory Introduction (한글)Things Factory Introduction (한글)
Things Factory Introduction (한글)Hatio, Lab.
 
Subject Guide in Chemistry(201502)
Subject Guide in Chemistry(201502)Subject Guide in Chemistry(201502)
Subject Guide in Chemistry(201502)Yulee Kwon
 
[2A6]web & health 2.0. 회사에서의 data science란?
[2A6]web & health 2.0. 회사에서의 data science란?[2A6]web & health 2.0. 회사에서의 data science란?
[2A6]web & health 2.0. 회사에서의 data science란?NAVER D2
 

Destaque (20)

[강의소개] 안드로이드 앱 개발 입문 캠프 4기
[강의소개] 안드로이드 앱 개발 입문 캠프 4기[강의소개] 안드로이드 앱 개발 입문 캠프 4기
[강의소개] 안드로이드 앱 개발 입문 캠프 4기
 
덕성여자대학교 SAGE 이용자 가이드
덕성여자대학교 SAGE 이용자 가이드덕성여자대학교 SAGE 이용자 가이드
덕성여자대학교 SAGE 이용자 가이드
 
Binding business data to vaadin components
Binding business data to vaadin componentsBinding business data to vaadin components
Binding business data to vaadin components
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3
 
Hello+gentle flow (1)
Hello+gentle flow (1)Hello+gentle flow (1)
Hello+gentle flow (1)
 
자바 8 스트림 API
자바 8 스트림 API자바 8 스트림 API
자바 8 스트림 API
 
대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균
 
Redis edu 1
Redis edu 1Redis edu 1
Redis edu 1
 
JPA 프로그래밍 (1)
JPA 프로그래밍 (1)JPA 프로그래밍 (1)
JPA 프로그래밍 (1)
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
 
React 소개 및 구현방법 Demo
React 소개 및 구현방법 DemoReact 소개 및 구현방법 Demo
React 소개 및 구현방법 Demo
 
Team Janel
Team JanelTeam Janel
Team Janel
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
Things Factory Introduction (한글)
Things Factory Introduction (한글)Things Factory Introduction (한글)
Things Factory Introduction (한글)
 
Subject Guide in Chemistry(201502)
Subject Guide in Chemistry(201502)Subject Guide in Chemistry(201502)
Subject Guide in Chemistry(201502)
 
[2A6]web & health 2.0. 회사에서의 data science란?
[2A6]web & health 2.0. 회사에서의 data science란?[2A6]web & health 2.0. 회사에서의 data science란?
[2A6]web & health 2.0. 회사에서의 data science란?
 

Semelhante a Java JPA

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로NHN FORWARD
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까Sunghyun Roh
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2plusperson
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSanghyuk Jung
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVONYounghan Kim
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 uEngine Solutions
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 

Semelhante a Java JPA (20)

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDD
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Spring portfolio2
Spring portfolio2Spring portfolio2
Spring portfolio2
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
ecdevday4
ecdevday4ecdevday4
ecdevday4
 

Java JPA

  • 1.
  • 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) : 스토어드 프로시저 접근 가능, 컨버터, 엔티티 그래프 기능 추가
  • 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 사용 => 페이징 방식, 스트링 함수, 날짜 함수 등
  • 10. Life cycle of Persistence Context
  • 11. Entity Manager Entity Manager Factory : entity manager를 생성 Entity manager : request or session당 persistence 관리. (persist, find, flush등) Entity Transaction : commit 시 persistence area의 내용이 반영
  • 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”);
  • 20. Web project template Based on Spring Boot Based on Vaadin + spring data JPA Web project framework Test Driven Development(JUnit)
  • 21. Next Seminar (two per month) Vaadin + Spring data JPA Rabbit MQ Google Polymer