๋ค์ด๊ฐ๋ฉฐ
JPQL, Querydsl, ๊ทธ๋ฆฌ๊ณ Spring Data JPA ๋ชจ๋ ๋ค์ํ ํ์ด์ง ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ์๋๋ฐ ์ด๋ฒ์ ์ด ๋ถ๋ถ์ ๋ฐ๋ก ์ ๋ฆฌํด์ ๋์ค์ ์ ์ ํ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ธ ์ ์๊ฒ ์ ๋ฆฌํด๋ณด์๋ค.
JPQL ํ์ด์ง ์ฒ๋ฆฌ
JPQL(Java Persistence Query Language)๋ JPA๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ํ๋ ์ธ์ด์
๋๋ค. ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ํด์๋ EntityManager
๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , setFirstResult
์ setMaxResults
๋ฉ์๋๋ฅผ ํตํด ๊ฒฐ๊ณผ์ ๋ฒ์๋ฅผ ์ง์ ํฉ๋๋ค.
String jpql = "SELECT m FROM Member m ORDER BY m.name";
Query query = em.createQuery(jpql);
query.setFirstResult(10); // ์์ ์ธ๋ฑ์ค
query.setMaxResults(20); // ์กฐํํ ๋ฐ์ดํฐ ์
List<Member> members = query.getResultList();
์ด ๋ฐฉ๋ฒ์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์ ์ดํ ์ ์์ผ๋, ์ฟผ๋ฆฌ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๊ณ , ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ์๋ ๋ค์ ๋ถํธํ ์ ์์ต๋๋ค.
Querydsl ํ์ด์ง ์ฒ๋ฆฌ
Querydsl์ ํ์
์์ ์ฑ์ ์ ๊ณตํ๋ ์ฟผ๋ฆฌ ์์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. JPAQueryFactory
๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ , offset
๊ณผ limit
๋ฉ์๋๋ก ํ์ด์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QueryResults<Member> results = queryFactory
.selectFrom(member)
.orderBy(member.name.asc())
.offset(10)
.limit(20)
.fetchResults();
List<Member> members = results.getResults();
long total = results.getTotal();
Querydsl์ ์ง๊ด์ ์ธ API๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ณต์กํ ์ฟผ๋ฆฌ๋ ํ์ ์์ ํ๊ฒ ์์ฑํ ์ ์์ด ๊ฐ๋ฐ ๊ณผ์ ์์์ ๋ฒ๊ทธ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
Spring Data JPA ํ์ด์ง ์ฒ๋ฆฌ
Spring Data JPA๋ ๋ฉ์๋ ์ด๋ฆ๋ง์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฐ๋ ฅํ ๋ฆฌํฌ์งํ ๋ฆฌ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. Pageable
์ธํฐํ์ด์ค๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ๋ฉ์๋๋ฅผ ํตํด ์๋์ผ๋ก ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
public interface MemberRepository extends JpaRepository<Member, Long> {
Page<Member> findByLastName(String lastName, Pageable pageable);
}
Pageable pageable = PageRequest.of(0, 20, Sort.by("name"));
Page<Member> page = memberRepository.findByLastName("Smith", pageable);
List<Member> members = page.getContent();
Spring Data JPA๋ ๊ตฌํ์ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์ค์ฌ์ฃผ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋๋ค.
๊ฒฐ๋ก
JPQL, Querydsl, Spring Data JPA ๊ฐ๊ฐ์ ๋ฐฉ์์ Java์์ ๋ฐ์ดํฐ ํ์ด์ง์ ๊ตฌํํ ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋จํ CRUD ์์
์๋ Spring Data JPA๊ฐ ์ ํฉํ๋ฉฐ, ๋ณต์กํ ์ฟผ๋ฆฌ๋ ๋์ ์ฟผ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ Querydsl์ด ํ์ํ ์ ํ์ด ๋ ์ ์์ต๋๋ค. JPQL์ ์ง์ ์ ์ธ ์ฟผ๋ฆฌ ์ ์ด๊ฐ ํ์ํ ๋ ์ ์ฉํฉ๋๋ค.
๊ฐ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ๊ฐ๋ฐํ์ ์ ํธ๋์ ๋ฐ๋ผ ์ ์ ํ ์ฌ์ฉํด๋ณด์