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.

Spring data jpa

4,862 views

Published on

Spring data jpa

Published in: Technology
  • Be the first to comment

Spring data jpa

  1. 1. Spring Data JPA + Hibernate + QueryDSL
  2. 2. ORM 을 사용하는데 쉬운 방법을 제공 참고: 좌충우돌 ORM 개발기 | Devon 2012 http://www.slideshare.net/daumdna/devon -2012-b4-orm
  3. 3. 2012년 8월 국내 구글검색
  4. 4. 2012년 8월 전세계 구글검색
  5. 5. Spring Data 데이터를 다루는데 필요한, 기본 인터페이스를 정의함. 구현체도 제공 Spring Data JPA, MongoDB, REDIS, SOLR, ElasticSerch 등
  6. 6. JPA 자바에서 제정한, ORM 관련 표준 스펙 구현체로는 Hibernate, EclipseLINK 등
  7. 7. JPA 장점 - 쿼리를 만들지 않으니, DB 벤더에 종속 적이지 않다. - 단순 테이블 매핑 정도라면, 쉽게 구현 가능 - 순수한 모델 객체를 지향하는 Persistence 코딩 패턴을 따라갈 수 있 다.
  8. 8. JPA 단점 - 10ms 튜닝이 중요한 서비스 - N+1 성능 문제. 쿼리가 100개가 동시에 날아간다. - 쿼리를 먼저 생각하고, 코딩하면 어렵다. 특히 JOIN
  9. 9. 일반적인 MVC-DAO 패턴 SERVICE DAO =Interface= DAOImpl =Implements=
  10. 10. Spring DATA-JPA DAO 패턴 SERVICE DAO =Interface= DAOImpl =Implements=
  11. 11. JPA 를 이용한 DAO 구현 * TABLE – CLASS 매핑 TV_SECTION TABLE TvSection Entity Class
  12. 12. JPA 를 이용한 DAO 구현 * TABLE – CLASS 매핑 @Entity @Table(name="tv_section") public class TvSection { @Id @Column(name = "tv_program_id") private long tvProgramId; private int channel;
  13. 13. JPA 를 이용한 DAO 구현 * DAO 인터페이스 만들기 @Repository public interface TvSectionRepository extends PagingAndSortingRepository<TvSection, Long> { }
  14. 14. JPA 를 이용한 DAO 구현 * 결과 가져오기 tvSectionRepository.findAll();
  15. 15. JPA 를 이용한 DAO 구현 • 원리 - 1 DAO 인터페이스만 정의하면 하위 구현은 Spring Data JPA 가 알아서.. 컨텍스트가 로딩이 될때, 내가 정의한 쿼리를 생성해둡니다.
  16. 16. JPA 를 이용한 DAO 구현 • 원리 - 2 대부분의 CRUD 가 해결된 구현체가 존재합 니다. PagingAndSortingRepository – 페이징 기능 CrudRepository – CRUD 기능 Repository - 기본
  17. 17. JPA 를 이용한 DAO 구현 • 페이징 결과 가져오기 Sort sort = new Sort( new Order(Direction.DESC, "lastmodified") ); Pageable pageable = new PageRequest(0, 10, sort); tvSectionRepository.findAll(pageable);
  18. 18. JPA 를 이용한 DAO 구현 • 조건문 추가하기 -1 @Repository public interface TvSectionRepository extends PagingAndSortingRepository<TvSection, Long> { TvSection findByTvProgramId(long Id); }
  19. 19. JPA 를 이용한 DAO 구현 • 조건문 추가하기 – Method 이름을 사용 And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Between findByStartDateBetween … where x.startDate between 1? and ?2 Like findByFirstnameLike … where x.firstname like ?1
  20. 20. JPA 를 이용한 DAO 구현 • 테이블을 여러 개 조인하고 수많은 조건 문이 있는 경우라면… findByLastnameAndFirstnameOrDateB etweenChannelLikeLastnameNotInStar tDate(String a, String b, Date c, …..)
  21. 21. JPA 를 이용한 DAO 구현 • 조건문 추가하기 – Spec 을 지정 - CriteriaBuilder 를 이용하기 - QueryDSL을 이용하기 tvSectionRepository.findAll(spec, pageable);
  22. 22. JPA 를 이용한 DAO 구현 • 조건문 추가하기 – CriteriaBuilder CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Order> cq = cb.createQuery(Order.class); SetJoin<Order, Item> itemNode = cq.from(Order.class).join(Order_.items); cq.where( cb.equal(itemNode.get(Item_.id), 5 ) ) .distinct(true);
  23. 23. JPA 를 이용한 DAO 구현 • 조건문 추가하기 – CriteriaBuilder CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Order> cq = cb.createQuery(Order.class); SetJoin<Order, Item> itemNode = cq.from(Order.class).join(Order_.items); cq.where( cb.equal(itemNode.get(Item_.id), 5 ) ) .distinct(true);
  24. 24. JPA 를 이용한 DAO 구현 • 조건문 추가하기 – QueryDSL QTvSection.tvSection.channel.eq(value); QTvSection.tvSection.title.like(value)
  25. 25. JPA 를 이용한 DAO 구현 • 조건문 추가하기 – QueryDSL BooleanBuilder builder = new BooleanBuilder(); builder.and( QTvSection.tvSection.channel.eq(value) ); builder.and( QTvSection.tvSection.titleKo.like(value) ); builder.and( QTvSection.tvSection.titleKo.isNotNull() ); repository.findAll(builder.getValue(), pageable);
  26. 26. 질문해주세요….ㄷㄷ

×