Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
하이버네이트
기초&객체 지향 지원에 대하여
처음 떠오르는 코드는?
이 시간의 목적
* ORM과 하이버네이트 이해
* 객체 지향/ 도메인에 대한 호기심 자극
살펴볼 내용
* ORM과 하이버네이트
* 하이버네이트 기초 사용법
* 하이버네이트 객체 지향 지원
* 맺음말
ORM과 하이버네이트
관계형 DB != 객체 지향
ORM(Object-relational mapping)이란?
ORM(Object-relational mapping) 이 제공해야 하는 기능
- 객체를 table에 저장해 주고, table에 저장된 data로부터 객체를 생성
- Metadata 사용 object 와 table 사이...
ORM 과 매퍼 솔루션들
ORM 장점 / 단점
장점 단점
- 생산성 향상
: query + 객체 생성 코드 작성 불필요 , Biz
logic에 집중
- 유지 보수 용이
: JDBC, ADO.NET API 통한 코드 축소
- 리펙토링 용이
: 특...
하이버네이트인 이유
= 쉬운 사용방법
- 설정 파일을 통한 매핑 관리
= 객체 지향의 다양한 특징 지원
- 다양한 연관 매핑 지원 (1:1, 1:N, N:1, N:M)
- 상속지원
= 다양한 테이블 구조에 대한 매핑 지...
ORM 도구가 필요한 이유
하이버네이트 기초 사용법
• 프로그래밍 절차
• 매핑 설정 파일 작성
Brand.java
@OneToMany(mappedBy="brand",fetch=FetchType.EAGER)
public Set<BrandImage> getBrandImagelist() {
r...
• 클래스 작성법
@Table(name="brand", schema="public")
public class Brand extends BaseEntity implements Serializable {
private st...
• 하이버네이트 설정 파일 작성 (hibernate.cfg.xml)
<hibernate-configuration>
<session-factory>
<mapping class="net.fashiongo.admin.comm...
• Hibernate type
• Hibernate type
• 하이버네이트 설정 파일 작성 (application.properties)
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
jdbc.url=jdbc:postgre...
• SessionFactory API
• SessionFactory 초기화
import org.hibernate.SessionFactory;
@Repository
public class BrandDaoImpl implements BrandDao{
priva...
• 기본 CRUD API :
Blog blog = new blog();
blog.setName(..);
blog.setImage(ImageUser);
sessionFactory.getCurrentSession().sav...
• 쿼리 API
하이버네이트의 객체 지향 지원
하이버네이트의 연관 지원
• Collection 매핑
연관 매핑 예 – 1:1 PK 공유
연관 매핑 예 – 1:N / N:1 연관
@Table(name="brand", schema="public")
public class Brand extends BaseEntity implements Serializable...
Hibernate 기초
Upcoming SlideShare
Loading in …5
×

Hibernate 기초

3,330 views

Published on

Hibernate 기초

Published in: Software
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Hibernate 기초

  1. 1. 하이버네이트 기초&객체 지향 지원에 대하여
  2. 2. 처음 떠오르는 코드는?
  3. 3. 이 시간의 목적 * ORM과 하이버네이트 이해 * 객체 지향/ 도메인에 대한 호기심 자극
  4. 4. 살펴볼 내용 * ORM과 하이버네이트 * 하이버네이트 기초 사용법 * 하이버네이트 객체 지향 지원 * 맺음말
  5. 5. ORM과 하이버네이트
  6. 6. 관계형 DB != 객체 지향
  7. 7. ORM(Object-relational mapping)이란?
  8. 8. ORM(Object-relational mapping) 이 제공해야 하는 기능 - 객체를 table에 저장해 주고, table에 저장된 data로부터 객체를 생성 - Metadata 사용 object 와 table 사이의 mapping 정보 지정 - Class 상속, 객체 사이의 연관 등을 객체 modeling으로 지원해야 한다 - Class와 Class의 property을 사용하여 객체를 조회할 수 있어야 한다 - 객체 값 변경을 자동으로 database에 반영해야 한다 - 상황에 따라서 성능을 개선할 수 있는 방법을 제공해야 한다. - Join 기반 조회 - Native query - Cache
  9. 9. ORM 과 매퍼 솔루션들
  10. 10. ORM 장점 / 단점 장점 단점 - 생산성 향상 : query + 객체 생성 코드 작성 불필요 , Biz logic에 집중 - 유지 보수 용이 : JDBC, ADO.NET API 통한 코드 축소 - 리펙토링 용이 : 특정 DBMS 에 비종속적 - DAO 패턴에 익숙한 개발자는 초기 어려움 - ORM 을 잘못 사용할 경우 성능 저하 우려 - OLAP 또는 프로시져가 많은 시스템의 경우 에는 객체 지향적인 장점 활용이 제한적
  11. 11. 하이버네이트인 이유 = 쉬운 사용방법 - 설정 파일을 통한 매핑 관리 = 객체 지향의 다양한 특징 지원 - 다양한 연관 매핑 지원 (1:1, 1:N, N:1, N:M) - 상속지원 = 다양한 테이블 구조에 대한 매핑 지원 = 객체 기반 쿼리 지원 : HQL Criteria = 성능 향상 기법 제공 - 2차 캐시, Lazy loading 등
  12. 12. ORM 도구가 필요한 이유
  13. 13. 하이버네이트 기초 사용법
  14. 14. • 프로그래밍 절차
  15. 15. • 매핑 설정 파일 작성 Brand.java @OneToMany(mappedBy="brand",fetch=FetchType.EAGER) public Set<BrandImage> getBrandImagelist() { return brandImagelist; } public void setBrandImagelist(Set<BrandImage> brandImagelist) { this.brandImagelist = brandImagelist; } Hibernate.cfg.xml <mapping class="net.fashiongo.admin.common.entity.Brand"/> <mapping class="net.fashiongo.admin.common.entity.BrandImage"/>
  16. 16. • 클래스 작성법 @Table(name="brand", schema="public") public class Brand extends BaseEntity implements Serializable { private static final long serialVersionUID = 178207897968591488L; private Integer brandId; // PK와 매핑되는 프로퍼티 제공 private String brandName; private String description; ~ private Set<BrandImage> brandImagelist = new HashSet<BrandImage>(); public Brand() {} // 기본 생성자 제공 @Id @SequenceGenerator(name="pk_sequence",sequenceName="public.brand_id_seq", allocationSize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence") @Column(name = "brand_id", unique=true, nullable=false) public Integer getBrandId() { // getter/setter 제공 return brandId; } public void setBrandId(Integer brandId) { this.brandId = brandId; }
  17. 17. • 하이버네이트 설정 파일 작성 (hibernate.cfg.xml) <hibernate-configuration> <session-factory> <mapping class="net.fashiongo.admin.common.entity.Brand"/> //매핑 설정 <mapping class="net.fashiongo.admin.common.entity.BrandImage"/> <mapping class="net.fashiongo.admin.common.entity.Category"/> <mapping class="net.fashiongo.admin.common.entity.Stockist"/> <mapping class="net.fashiongo.admin.common.entity.CityFactor"/> <mapping class="net.fashiongo.admin.common.entity.Item"/> <mapping class="net.fashiongo.admin.common.entity.PurchaseSource"/> <mapping class="net.fashiongo.admin.common.entity.Store"/> <mapping class="net.fashiongo.admin.common.entity.StoreImage"/> <mapping class="net.fashiongo.admin.common.entity.StoreBusinesshours"/> ~ <mapping class="net.fashiongo.admin.explore.model.MapCityExplore"/> <mapping class="net.fashiongo.admin.explore.model.Popular"/> </session-factory> </hibernate-configuration>
  18. 18. • Hibernate type
  19. 19. • Hibernate type
  20. 20. • 하이버네이트 설정 파일 작성 (application.properties) hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect jdbc.url=jdbc:postgresql://192.168.0.XXX:5432/XXX?schema=admin jdbc.usernane=postgres jdbc.password=XXXX
  21. 21. • SessionFactory API
  22. 22. • SessionFactory 초기화 import org.hibernate.SessionFactory; @Repository public class BrandDaoImpl implements BrandDao{ private SessionFactory sessionFactory; @Autowired //초기화 public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public List<Brand> selectBrandList(SearchParam searchParam) { StringBuffer brandListQueryBuffer = new StringBuffer(" SELECT brand.* from public.brand brand "+searchParam.getBrandSqlQuery()); brandListQueryBuffer.append(" ORDER BY brand.brand_id desc "); if(StringUtils.isNotEmpty(searchParam.getCurrentPage())){ brandListQueryBuffer.append( " limit " + searchParam.getDefaultPageSize() + " offset " + searchParam.getStartRecord() ); } return sessionFactory.getCurrentSession() //session을 이용한 CRUD 처리 .createSQLQuery(brandListQueryBuffer.toString()) .addEntity("brand",Brand.class).list(); }
  23. 23. • 기본 CRUD API : Blog blog = new blog(); blog.setName(..); blog.setImage(ImageUser); sessionFactory.getCurrentSession().save(blog); sessionFactory.getCurrentSession().update(blog); sessionFactory.getCurrentSession().delete(blog); sessionFactory.getCurrentSession().get(blog);
  24. 24. • 쿼리 API
  25. 25. 하이버네이트의 객체 지향 지원
  26. 26. 하이버네이트의 연관 지원
  27. 27. • Collection 매핑
  28. 28. 연관 매핑 예 – 1:1 PK 공유
  29. 29. 연관 매핑 예 – 1:N / N:1 연관 @Table(name="brand", schema="public") public class Brand extends BaseEntity implements Serializable { private static final long serialVersionUID = 178207897968591488L; private Integer brandId; private String brandName; ~ private Set<BrandImage> brandImagelist = new HashSet<BrandImage>(); ~ @OneToMany(mappedBy="brand",fetch=FetchType.EAGER) public Set<BrandImage> getBrandImagelist() { return brandImagelist; } <li> <a style="cursor: zoom-in;" href="#"> <img src="${brandImagelist.webImage}" id="brandImageWeb_${brandImagelis t.brandImageId}"> </a> </li>

×