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;
}
β JPQL