본문 바로가기
Spring

Spring Data JPA: Method Query, Custom Query, Query DSL

by S2채닝S2 2023. 3. 24.

Spring Data JPA

  - 스프링에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트

  - Auto configuration 데이터소스 및 엔티티 매니저 트랜잭션 매니저 설정을 자동으로 해준다.

#YAML
spring:
  h2:
    console:
      enabled: true
  jpa:
    generate-ddl: true
    database: h2
    show-sql: true
    open-in-view: false
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
        query.in_clause_parameter_padding: true
        hbm2ddl:
          auto: create-drop

  - 데이터 저장계층에 대한 인터페이스 지원 > CRUD 작업을 편리하게 할 수 있다.

public interface CustomerRepository extends JpaRepository<Customer, Long> {
}

 

메소드 쿼리

  - 메소드 이름을 기반으로 쿼리를 생성, 실행

List<Order> findAllByOrderStatus(OrderStatus orderStatus);
//SELECT * FROM orders WHERE order_status = 'OPEND';

LIST<Order> findAllByOrderStatusOrderByOrderDatetime(OderStatus orderstatus);
//SELECT * FROM orders WHERE order_status = 'OPEND' ORDER BY order_datetime;

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

 

Spring Data JPA - Reference Documentation

Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

 

커스텀 쿼리

  - 메소드 이름만으로 짜기 힘든 복잡한 쿼리를 커스텀하여 사용

  - @Query 사용

@Query("SELECT o FROM Order AS o WHERE o.memo LIKE %?1%")
Optional<Order> findByMemo(String memo);

 

Query DSL

  - Builder 패턴으로 쿼리를 생성

List<User> users = queryFactory.selectFrom(user)
 .where(
 	user.firstName.eq("gildong"),
    user.lastName.eq("Hong"))
 .orderBy(user.lastName.asc())
 .fetch();
 
 //SELECT * FROM user 
 //WHERE first_name='gildong' AND last_name="HONG" 
 //ORDER BY last_name ASC;

http://querydsl.com/

 

Querydsl - Unified Queries for Java

Unified Queries for Java. Querydsl is compact, safe and easy to learn. <!-- Querydsl Unified Queries for Java Querydsl provides a unified querying layer for multiple backends in Java. Compared to the alternatives Querydsl is more compact, safer and easier

querydsl.com

 

'Spring' 카테고리의 다른 글

Spring Security: RequestCacheAwareFilter  (0) 2023.04.04
Spring Security Architecture  (0) 2023.04.04
Spring Data JPA: 프록시  (0) 2023.03.23
Spring Data JPA: 고급 매핑  (0) 2023.03.22
Spring Data JPA: 연관관계매핑  (0) 2023.03.19

최근댓글

최근글

skin by © 2024 ttuttak