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;
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 |