11. JPA 를 이용한 DAO 구현
* TABLE – CLASS 매핑
TV_SECTION
TABLE
TvSection
Entity Class
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. JPA 를 이용한 DAO 구현
* DAO 인터페이스 만들기
@Repository
public interface TvSectionRepository
extends
PagingAndSortingRepository<TvSection,
Long> {
}
14. JPA 를 이용한 DAO 구현
* 결과 가져오기
tvSectionRepository.findAll();
15. JPA 를 이용한 DAO 구현
• 원리 - 1
DAO 인터페이스만 정의하면
하위 구현은 Spring Data JPA 가 알아서..
컨텍스트가 로딩이 될때,
내가 정의한 쿼리를 생성해둡니다.
16. JPA 를 이용한 DAO 구현
• 원리 - 2
대부분의 CRUD 가 해결된 구현체가 존재합
니다.
PagingAndSortingRepository – 페이징 기능
CrudRepository – CRUD 기능
Repository - 기본
17. JPA 를 이용한 DAO 구현
• 페이징 결과 가져오기
Sort sort = new Sort(
new Order(Direction.DESC, "lastmodified")
);
Pageable pageable =
new PageRequest(0, 10, sort);
tvSectionRepository.findAll(pageable);
18. JPA 를 이용한 DAO 구현
• 조건문 추가하기 -1
@Repository
public interface TvSectionRepository extends
PagingAndSortingRepository<TvSection, Long> {
TvSection findByTvProgramId(long Id);
}
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. JPA 를 이용한 DAO 구현
• 테이블을 여러 개 조인하고 수많은 조건
문이 있는 경우라면…
findByLastnameAndFirstnameOrDateB
etweenChannelLikeLastnameNotInStar
tDate(String a, String b, Date c, …..)
21. JPA 를 이용한 DAO 구현
• 조건문 추가하기 – Spec 을 지정
- CriteriaBuilder 를 이용하기
- QueryDSL을 이용하기
tvSectionRepository.findAll(spec, pageable);
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. 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. JPA 를 이용한 DAO 구현
• 조건문 추가하기 – QueryDSL
QTvSection.tvSection.channel.eq(value);
QTvSection.tvSection.title.like(value)
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);