본문 바로가기

Programming

[Spring Boot] Query dsl jpa 간단 사용 예시

QueryDSL?

QeuryDSL은 자바에서 다양한 백엔드 데이터를 타입에 안전하며 쿼리와 유사하게 사용할 수 있게 해주는 프레임워크이다.
JPA 및 하이버네이트와 같이 다양한 ORM 프레임워크와 사용이 가능하다.

사용 예시

public class StockRepositoryImpl implements StockRepository {

    private final EntityManager em;

    public List<Stock> findByName(String name) {
        QStock stock = QStock.stock;
        BooleanExpression nameFilter = stock.name.eq(name);

        JPAQuery<Stock> query = new JPAQuery<>(em);
        return query.select(stock).from(stock).where(nameFilter).fetch();
    }
}

QueryDSL에 의해서 QStock Class가 생성이 되며, 해당 클래스를 사용하여 stock의 이름을 통해 검색하는 예시이다.

select 및 from으로 쿼리를 정의하고, where에 조건으로 사용되는 필터를 추가 후, fetch를 통해 쿼리를 실행하고 결과를 반환받는다.

Join 예시

public List<Report> findReportsByStockName(String stockName) {
        QStock stock = QStock.stock;
        QReport report = QReport.report;
        BooleanExpression stockNameFilter = stock.name.eq(stockName);

        JPAQuery<Report> query = new JPAQuery<>(em);
        return query.select(report).from(report)
                    .join(stock).on(report.stock.eq(stock))
                    .where(stockNameFilter).fetch();
}

위는 report와 stock을 join하여 조회하는 예시이다.

join(stock).on(report.stock.eq(stock))에서 join 조건에 따라서 report 테이블과 stock 테이블을 join할 수 있다.

반응형