본 문서는 인프런의 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 (김영한) 강의를 공부하며 작성한 개인 노트입니다.
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByName(String name);
}
기본적 CRUD 기능 모두 제공
findByName
등)도 정확한 JPQL 쿼리 실행 select m from member m where m.name = :name
build.gradle
buildscript {
dependencies {
classpath("gradle.plugin.come.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
}
}
plugins {
...
id
}
dependencies {
...
implementation 'com.querydsl:querydsl-jpa'
implementation 'com.querydsl:querydsl-apt'
}
def querydslDir = 'src/main/generated'
querydsl {
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main {
java {
srcDirs = ['src/main/java', querydslDir]
}
}
}
main/java/jpabook/repository/OrderRepository
@Repository
public class OrderRepository {
public List<Order> findAll(OrderSearch orderSearch) {
QOrder order = QOrder.order;
QMember member = QMember.member;
JPAQueryFactory query = new JPAQueryFactory(em);
return query.select(order)
.from(order)
.join(order.member, member)
.where(statusEq(orderSearch.getOrderStatus()))
.limit(1000)
.fetch();
}
private BooleanExpression statusEq(OrderStatus statusCond) {
if (statusCond == null) {
return null;
}
return QOrder.order.status.eq(statusCond);
}
QueryDsl은 SQL/JPQL와 유사 & 자바 코드로 동적 쿼리 생성