QueryDSL

QueryDSL μ΄λž€ ?

QueryDSL 은 정적 νƒ€μž…μ„ μ΄μš©ν•΄μ„œ SQL κ³Ό 같은 쿼리λ₯Ό 생성할 수 μžˆλ„λ‘ ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬ μž…λ‹ˆλ‹€.

JPQL 처림 λ¬Έμžμ—΄λ‘œ μž‘μ„±ν•˜κ±°λ‚˜ Mybatis 처럼 XML νŒŒμΌμ— 쿼리λ₯Ό μž‘μ„±ν•˜λŠ” λŒ€μ‹ , QueryDSL 이 μ œκ³΅ν•˜λŠ” Fluent API λ₯Ό μ΄μš©ν•˜μ—¬ 쿼리λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

즉 JPA μ—μ„œ μ‚¬μš©ν–ˆλ˜ SQL κ³Ό λΉ„μŠ·ν•˜κ²Œ 생긴 JQPL μ‘°μ°¨ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ( := 였λ₯˜κ°€ 적닀)

μž₯점

  • IDE 의 μ½”λ“œ μžλ™μ™„μ„± κΈ°λŠ₯을 μ‚¬μš©
  • λ¬Έλ²•μ μœΌλ‘œ 잘λͺ»λœ 쿼리λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
  • 도메인 νƒ€μž…κ³Ό property λ₯Ό μ•ˆμ „ν•˜κ²Œ μ°Έμ‘°ν•  수 있음
  • 도메인 νƒ€μž…μ˜ λ¦¬νŽ™ν† λ§μ„ 더 잘 ν•  수 있음

QueryDSL 은 νƒ€μž…μ— μ•ˆμ „ν•œ λ°©μ‹μœΌλ‘œ 쿼리λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

즉 QueryDSL 의 핡심원칙은 νƒ€μž… μ•ˆμ •μ„± (Type Safety) μž…λ‹ˆλ‹€.

μ΄λŠ” λ¬Έμžμ—΄ 기반이 μ•„λ‹Œ λ©”μ„œλ“œμ˜ 호좜둜 쿼리가 μˆ˜ν–‰λ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

query.form().where()

μœ„μ™€ 같이 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ 쿼리λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μ‚¬μš©

κΈ°λ³Έ μ‚¬μš©λ²•μ€ μ•„λž˜μ™€ κ°™λ‹€.

@Repository
public class TestRepository {

  @PersistenceContext
  private Entitymanager em;

  ...  
}





Β 
Β 
Β 




public List<Book> findAll() {
  JPAQuery query = new JPAQuery(em);

  Book book = new Book("book");

  List<Book> bookList = query.from(book)
                              .orderBy(book.regDate.desc())
                              .list(book);

  return bookList;
}