SlideShare uma empresa Scribd logo
1 de 45
본 문서의 배포 및 변경 ,  출력 및 활용에 관한 모든 권리는 작성자에 있습니다 . 본 서비스는 제 1 회 대전  IT  개발자 커뮤니티 참석자를 위해 제공됩니다 .
하이버네이트 : 기초 & 객체 지향 지원에 대하여 최범균 ,  다음커뮤니케이션
처음 떠오르는 코드는 ? insert into ORDER  (..,ordererid,sa_zipcode, sa_address1,..)  values (?,?,?..); insert into ORDERED_ITEM  (..,itemid,quantity,price..) values (?,?,?...); Order order = new Order(); AddressInfo shippingAddress = orderRequest. getShippingAddress(); order.setShippingAddress( shippingAddress); Item item = getItem(itemId); order.addOrderedItem( createOrderedItem(price, item)); saveOrder(order);
처음 떠오르는 코드는 ? select  orderid, ordererid, sa_zipcode, sa_address1, ..,  u.name from ORDER o, USER u,  where o.ordererid = u.userid .. select * from ORDERED_ITEM  where orderid = ? .. Order order = orderRepository. findOrder(orderId); User orderer = order.getOrderer(); ShippingAddress address =  order.getShppingAddress(); List<OrderedItem> itemList =  order.getOrderedItemList(); PaymentInfo paymentInfo =  order.getPaymentInfo();
SQL  중심 객체 중심 DB  중심 객체 관계 중심 ORM
이 시간의 목적 ,[object Object],[object Object],[object Object],[object Object]
살펴볼 내용 ,[object Object],[object Object],[object Object],[object Object],[object Object]
ORM 과 하이버네이트
관계형  DB !=  객체 지향 관계형 데이터 객체 연관 FK 를 통한 단순 연관 양방향 연관 . List, Map  등 풍부한 연관 표현 상속 지원하지 않음 상속 / 구현을 통한 다형성 제공 세밀함 Value  타입 존재하지 않음 [DBMS 에 특화 ] Value  타입 통한 세밀한 설계
ORM  이란 ? 객체 관계형 데이터
ORM 과 매퍼 솔루션들 객체 지향 지원 Hibernate JPA JDO iBATIS Torque 단순 매퍼
하이버네이트인 이유 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ORM  도구가 필요한 이유 객체지향모델링 단순 코드 반복 제거 생산성 증가 자체개발 어려움 코드품질향상 pstmt.setString(1,bean.getX()); pstmt.setString(2,bean.getY()); pstmt.setSTring(3,bean.getZ());
하이버네이트 기초 사용법
프로그래밍 절차 영속 클래스 작성 / 변경 매핑 설정 파일 작성 / 변경 테이블 ( 스키마 ) 생성 / 변경 하이버네이트 이용 CRUD  처리 어플리케이션 실행
매핑 설정 파일 작성 <hibernate-mapping> <class name=“Order” table=“ORDER”> <id name=“id” column=“ORDER_ID”> <generator name=“identity” /> </id> <property name=“registerDate”  column=“REGDATE”  type=“date” /> <component  name=“shppingAddress” class=“AddressInfo”> <property name=“zipCode” column=“SA_ZIPCODE” /> </component> </class> </hibernate-mapping>
클래스 작성법 public class Order implements Serializable { private Integer id; private Date registerDate; public Order() { } public Date getRegisterDate() { … } public void setRegisterDate() { … } public boolean equals(Object o) { … } public int hashcode() { … } } final class 가 아님 PK 와 매핑되는  프로퍼티 제공 기본 생성자 제공 getter/setter  제공
하입네이트 설정 파일 작성 <hibernate-configuration> <session-factory> <property name=“connection.driver_class”>..</property> <property name=“connection.url”>jdbc:mysql:…</property> <property name=“hibernate.c3p0.min_size”>5</property> … <mapping resource=“Order.hbm.xml” /> <mapping resource=“Item.hbm.xml” /> </session-factory> </hibernate-configuration> DB  연결 설정 매핑 설정 파일 지정
SessionFactory  초기화 SessionFactory sessionFactory =  new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); // session 을 이용한  CRUD  처리
기본  CRUD API: save() Order order = new Order(); order.addOrderedItem(..); order.setShppingAddress(shppingAddress); order.setOrderer(orderedUser); session.save(order) ;
기본  CRUD API: get() Integer id = …; Order order = (Order) session.get(Order.class, id) ; order.getOrderedItemList(); User orderer = order.getOrderer();
기본  CRUD API: update() Order order = (Order)session.get(…) order.setShppingAddress(newAddress); session.update (order);
기본  CRUD API: delete() Order order = (Order)session.get(…) session.delete (order);
쿼리  API ,[object Object],[object Object],[object Object],Query query = session.createQuery(“from Order where id = :id”); query.setInteger(“id”, id); List orderList = query.list(); Criteria crit = session.createCriteria(Order.class); crit.add(Restrictions.eq(“id”, id)); List orderList = crit.list();
영속성 처리의 투명함 (Transparent Persistence) tx = session.beginTransaction(); Order order =  (Order)session.get(Order.class, id); order.setState(OrderState.CANCEL); tx.commit();
하이버네이트의 객체 지향 지원
Entity vs. Value Entity 의 특징 : -  식별값을 가짐 -  자체 라이프 사이클 ,[object Object],[object Object],[object Object],[object Object]
객체 지향 지원  -  연관
하이버네이트의 연관 지원 ,[object Object],[object Object],[object Object],[object Object],[object Object]
연관 매핑 예 – 컴포넌트 매핑 <hibernate-mapping> <class name=“Order” table=“ORDER”> <id name=“id” column=“ORDER_ID”> <generator name=“identity” /> </id> <property name=“registerDate”  column=“REGDATE”  type=“date” /> <component  name=“shppingAddress” class=“AddressInfo”> <property name=“zipCode” column=“SA_ZIPCODE” /> </component> </class> </hibernate-mapping>
연관 매핑 예  - 1-1 PK  공유 <class name=“Item” table=“ITEM”> <id name=“id” column=“ITEM_ID”> </id> <one-to-one name=“detail” class=“ItemDetail”  cascade=“save-update” /> </class> <class name=“ItemDetail” table=“ITEM_DETAIL”> <id name=“id” column=“ITEM_ID”> <generator class=“foreign”> <param name=“property”> item</param> <generator> </id> <one-to-one name=“item” class=“Item”  constrained=“true” /> </class>
연관 매핑 예 –  1-n/n-1  연관 <class name=“Item” table=“ITEM”> <id name=“id” column=“ITEM_ID”> </id> <set name=“comments” table=“ITEM_COMMENT”> <key column=“ITEM_ID” /> <one-to-many class=“ItemComment” /> </set> </class> <class name=“ItemComment” table=“ITEM_COMMENT”> <id name=“id” column=“COMMENT_ID”> </id> <many-to-one name=“item” class=“Item” /> </class>
영속성 전이
영속성 전이 설정 Order order = createOrder(); order.addOrderedItem(orderedItem1); order.addOrderedItem(orderedItem2); order.setOrderer(currentUser); order.setPaymentInfo(paymentInfo); session.save(order); <list name=“orderedItemList” table=“ORDERED_ITEM”  cascade=“save-updater, delete” > <key column=“ITEM_ID” /> <one-to-many class=“OrderedItem” /> </list>
객체 지향 지원  -  상속 Coupon coupon = getCoupon(couponId); PaymentInfo payInfo = new PaymentInfo(); payInfo.setUsedCoupon(coupon); order.setPaymentInfo(payInfo);
상속의 세 가지 구현 전략 지원
다형성 Coupon coupon = (Coupon) session.get(Coupon.class, id); PriceCoupon priceCoupon = (PriceCount) session.get(PriceCoupon.class, id) session.createQuery( “ from Coupon c “+ “ where c.expirationDate >= :date”);
하이버네이트 도입하기
처음부터 완벽할 순 없다 . 단순 매핑 Value , 1-1/n-1  연관 추가 1-n, n-m  연관 성능 향상 기법 적용 기본적인 사용법 습득 모델이 조금 풍부해짐 모델이 더욱 더 풍부해짐
100%  하이버네이트 ? 하이버네이트 기반 Native  쿼리 SQL(JDBC) 비 하이버네이트 OLAP 대량 배치 처리 …
맺음말
도메인에 집중 select … insert into …
오해 금지 ,[object Object],[object Object]
참고자료 ,[object Object],[object Object],[object Object],[object Object]
질문 있으세요 ? 나중에라도 대화가 필요하시면  [email_address]   으로 연락주세요

Mais conteúdo relacionado

Mais procurados

Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10hungrok
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Younghan Kim
 
[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지NAVER Engineering
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsEunYoung Kim
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기beom kyun choi
 
Client side storage in html5
Client side storage in html5Client side storage in html5
Client side storage in html5yongwoo Jeon
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈jihoon kim
 
처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1성일 한
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프Younghan Kim
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDBVincent Park
 

Mais procurados (20)

Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
2. 엔티티 매핑(entity mapping) 2 2 엔티티매핑 2-2-1. 식별자 매핑(@id, @id-class)
2. 엔티티 매핑(entity mapping) 2 2 엔티티매핑 2-2-1. 식별자 매핑(@id, @id-class)2. 엔티티 매핑(entity mapping) 2 2 엔티티매핑 2-2-1. 식별자 매핑(@id, @id-class)
2. 엔티티 매핑(entity mapping) 2 2 엔티티매핑 2-2-1. 식별자 매핑(@id, @id-class)
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
Client side storage in html5
Client side storage in html5Client side storage in html5
Client side storage in html5
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
 
Django View Part 1
Django View Part 1Django View Part 1
Django View Part 1
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
 
처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1처음배우는 자바스크립트, 제이쿼리 #1
처음배우는 자바스크립트, 제이쿼리 #1
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
 
Hibernate 기초
Hibernate 기초Hibernate 기초
Hibernate 기초
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDB
 

Destaque (20)

Yapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar ormYapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar orm
 
Anglu klb. n.d.2011 04 14
Anglu klb. n.d.2011 04 14Anglu klb. n.d.2011 04 14
Anglu klb. n.d.2011 04 14
 
Programa ciencias-secundaria-2011
Programa ciencias-secundaria-2011Programa ciencias-secundaria-2011
Programa ciencias-secundaria-2011
 
1.2 cukiernik
1.2 cukiernik1.2 cukiernik
1.2 cukiernik
 
Buscando a dory
Buscando a doryBuscando a dory
Buscando a dory
 
Fichapdf
FichapdfFichapdf
Fichapdf
 
Bucaramanga sig 21
Bucaramanga sig 21Bucaramanga sig 21
Bucaramanga sig 21
 
Zpe campaign format_ef
Zpe campaign format_efZpe campaign format_ef
Zpe campaign format_ef
 
NP Propuestas UPyD para 2013
NP Propuestas UPyD para 2013NP Propuestas UPyD para 2013
NP Propuestas UPyD para 2013
 
Ativos cafe-outubro2016
Ativos cafe-outubro2016Ativos cafe-outubro2016
Ativos cafe-outubro2016
 
Sresta Natural Bioproducts
Sresta Natural BioproductsSresta Natural Bioproducts
Sresta Natural Bioproducts
 
Departamentos en renta zona norte merida bufete inmobiliario casasenlinea.mx.php
Departamentos en renta zona norte merida bufete inmobiliario casasenlinea.mx.phpDepartamentos en renta zona norte merida bufete inmobiliario casasenlinea.mx.php
Departamentos en renta zona norte merida bufete inmobiliario casasenlinea.mx.php
 
Rotaflyer 2012 Feb2nd
Rotaflyer 2012 Feb2ndRotaflyer 2012 Feb2nd
Rotaflyer 2012 Feb2nd
 
Wheelhouse Top Tech
Wheelhouse Top TechWheelhouse Top Tech
Wheelhouse Top Tech
 
Presupuesto
PresupuestoPresupuesto
Presupuesto
 
UV-Schutz.pdf
UV-Schutz.pdfUV-Schutz.pdf
UV-Schutz.pdf
 
Ficha de inscricao_uzina
Ficha de inscricao_uzinaFicha de inscricao_uzina
Ficha de inscricao_uzina
 
VC/PE deals in India – December 2016
VC/PE deals in India – December  2016VC/PE deals in India – December  2016
VC/PE deals in India – December 2016
 
Setima aula sismologia-2
Setima aula sismologia-2Setima aula sismologia-2
Setima aula sismologia-2
 
What is research?
What is research?What is research?
What is research?
 

Semelhante a Daejeon IT Developer Conference Hibernate3

Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3plusperson
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Elasticsearch
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장홍준 김
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?JaewonLee153
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
RIA Description Language(09.11.04)
RIA Description Language(09.11.04)RIA Description Language(09.11.04)
RIA Description Language(09.11.04)Ethan Cha
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms
[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms
[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbmsNAVER D2
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with SpringKeesun Baik
 

Semelhante a Daejeon IT Developer Conference Hibernate3 (20)

Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
[Apex Trigger 연재강의 6회차] 트리거를 실무에서 어디에 어떻게 사용 하는가?
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
RIA Description Language(09.11.04)
RIA Description Language(09.11.04)RIA Description Language(09.11.04)
RIA Description Language(09.11.04)
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms
[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms
[223]rye, 샤딩을 지원하는 오픈소스 관계형 dbms
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
Device driver
Device driverDevice driver
Device driver
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
 

Daejeon IT Developer Conference Hibernate3

  • 1. 본 문서의 배포 및 변경 , 출력 및 활용에 관한 모든 권리는 작성자에 있습니다 . 본 서비스는 제 1 회 대전 IT 개발자 커뮤니티 참석자를 위해 제공됩니다 .
  • 2. 하이버네이트 : 기초 & 객체 지향 지원에 대하여 최범균 , 다음커뮤니케이션
  • 3. 처음 떠오르는 코드는 ? insert into ORDER (..,ordererid,sa_zipcode, sa_address1,..) values (?,?,?..); insert into ORDERED_ITEM (..,itemid,quantity,price..) values (?,?,?...); Order order = new Order(); AddressInfo shippingAddress = orderRequest. getShippingAddress(); order.setShippingAddress( shippingAddress); Item item = getItem(itemId); order.addOrderedItem( createOrderedItem(price, item)); saveOrder(order);
  • 4. 처음 떠오르는 코드는 ? select orderid, ordererid, sa_zipcode, sa_address1, .., u.name from ORDER o, USER u, where o.ordererid = u.userid .. select * from ORDERED_ITEM where orderid = ? .. Order order = orderRepository. findOrder(orderId); User orderer = order.getOrderer(); ShippingAddress address = order.getShppingAddress(); List<OrderedItem> itemList = order.getOrderedItemList(); PaymentInfo paymentInfo = order.getPaymentInfo();
  • 5. SQL 중심 객체 중심 DB 중심 객체 관계 중심 ORM
  • 6.
  • 7.
  • 9. 관계형 DB != 객체 지향 관계형 데이터 객체 연관 FK 를 통한 단순 연관 양방향 연관 . List, Map 등 풍부한 연관 표현 상속 지원하지 않음 상속 / 구현을 통한 다형성 제공 세밀함 Value 타입 존재하지 않음 [DBMS 에 특화 ] Value 타입 통한 세밀한 설계
  • 10. ORM 이란 ? 객체 관계형 데이터
  • 11. ORM 과 매퍼 솔루션들 객체 지향 지원 Hibernate JPA JDO iBATIS Torque 단순 매퍼
  • 12.
  • 13. ORM 도구가 필요한 이유 객체지향모델링 단순 코드 반복 제거 생산성 증가 자체개발 어려움 코드품질향상 pstmt.setString(1,bean.getX()); pstmt.setString(2,bean.getY()); pstmt.setSTring(3,bean.getZ());
  • 15. 프로그래밍 절차 영속 클래스 작성 / 변경 매핑 설정 파일 작성 / 변경 테이블 ( 스키마 ) 생성 / 변경 하이버네이트 이용 CRUD 처리 어플리케이션 실행
  • 16. 매핑 설정 파일 작성 <hibernate-mapping> <class name=“Order” table=“ORDER”> <id name=“id” column=“ORDER_ID”> <generator name=“identity” /> </id> <property name=“registerDate” column=“REGDATE” type=“date” /> <component name=“shppingAddress” class=“AddressInfo”> <property name=“zipCode” column=“SA_ZIPCODE” /> </component> </class> </hibernate-mapping>
  • 17. 클래스 작성법 public class Order implements Serializable { private Integer id; private Date registerDate; public Order() { } public Date getRegisterDate() { … } public void setRegisterDate() { … } public boolean equals(Object o) { … } public int hashcode() { … } } final class 가 아님 PK 와 매핑되는 프로퍼티 제공 기본 생성자 제공 getter/setter 제공
  • 18. 하입네이트 설정 파일 작성 <hibernate-configuration> <session-factory> <property name=“connection.driver_class”>..</property> <property name=“connection.url”>jdbc:mysql:…</property> <property name=“hibernate.c3p0.min_size”>5</property> … <mapping resource=“Order.hbm.xml” /> <mapping resource=“Item.hbm.xml” /> </session-factory> </hibernate-configuration> DB 연결 설정 매핑 설정 파일 지정
  • 19. SessionFactory 초기화 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); // session 을 이용한 CRUD 처리
  • 20. 기본 CRUD API: save() Order order = new Order(); order.addOrderedItem(..); order.setShppingAddress(shppingAddress); order.setOrderer(orderedUser); session.save(order) ;
  • 21. 기본 CRUD API: get() Integer id = …; Order order = (Order) session.get(Order.class, id) ; order.getOrderedItemList(); User orderer = order.getOrderer();
  • 22. 기본 CRUD API: update() Order order = (Order)session.get(…) order.setShppingAddress(newAddress); session.update (order);
  • 23. 기본 CRUD API: delete() Order order = (Order)session.get(…) session.delete (order);
  • 24.
  • 25. 영속성 처리의 투명함 (Transparent Persistence) tx = session.beginTransaction(); Order order = (Order)session.get(Order.class, id); order.setState(OrderState.CANCEL); tx.commit();
  • 27.
  • 29.
  • 30. 연관 매핑 예 – 컴포넌트 매핑 <hibernate-mapping> <class name=“Order” table=“ORDER”> <id name=“id” column=“ORDER_ID”> <generator name=“identity” /> </id> <property name=“registerDate” column=“REGDATE” type=“date” /> <component name=“shppingAddress” class=“AddressInfo”> <property name=“zipCode” column=“SA_ZIPCODE” /> </component> </class> </hibernate-mapping>
  • 31. 연관 매핑 예 - 1-1 PK 공유 <class name=“Item” table=“ITEM”> <id name=“id” column=“ITEM_ID”> </id> <one-to-one name=“detail” class=“ItemDetail” cascade=“save-update” /> </class> <class name=“ItemDetail” table=“ITEM_DETAIL”> <id name=“id” column=“ITEM_ID”> <generator class=“foreign”> <param name=“property”> item</param> <generator> </id> <one-to-one name=“item” class=“Item” constrained=“true” /> </class>
  • 32. 연관 매핑 예 – 1-n/n-1 연관 <class name=“Item” table=“ITEM”> <id name=“id” column=“ITEM_ID”> </id> <set name=“comments” table=“ITEM_COMMENT”> <key column=“ITEM_ID” /> <one-to-many class=“ItemComment” /> </set> </class> <class name=“ItemComment” table=“ITEM_COMMENT”> <id name=“id” column=“COMMENT_ID”> </id> <many-to-one name=“item” class=“Item” /> </class>
  • 34. 영속성 전이 설정 Order order = createOrder(); order.addOrderedItem(orderedItem1); order.addOrderedItem(orderedItem2); order.setOrderer(currentUser); order.setPaymentInfo(paymentInfo); session.save(order); <list name=“orderedItemList” table=“ORDERED_ITEM” cascade=“save-updater, delete” > <key column=“ITEM_ID” /> <one-to-many class=“OrderedItem” /> </list>
  • 35. 객체 지향 지원 - 상속 Coupon coupon = getCoupon(couponId); PaymentInfo payInfo = new PaymentInfo(); payInfo.setUsedCoupon(coupon); order.setPaymentInfo(payInfo);
  • 36. 상속의 세 가지 구현 전략 지원
  • 37. 다형성 Coupon coupon = (Coupon) session.get(Coupon.class, id); PriceCoupon priceCoupon = (PriceCount) session.get(PriceCoupon.class, id) session.createQuery( “ from Coupon c “+ “ where c.expirationDate >= :date”);
  • 39. 처음부터 완벽할 순 없다 . 단순 매핑 Value , 1-1/n-1 연관 추가 1-n, n-m 연관 성능 향상 기법 적용 기본적인 사용법 습득 모델이 조금 풍부해짐 모델이 더욱 더 풍부해짐
  • 40. 100% 하이버네이트 ? 하이버네이트 기반 Native 쿼리 SQL(JDBC) 비 하이버네이트 OLAP 대량 배치 처리 …
  • 42. 도메인에 집중 select … insert into …
  • 43.
  • 44.
  • 45. 질문 있으세요 ? 나중에라도 대화가 필요하시면 [email_address] 으로 연락주세요