스프링부트 너 뭐 돼?🤷‍♀️(12) - JPQL(2)

joyfulwave·2022년 12월 15일
0

피할 수 없다면 즐기자! 스프링부트 너.. 뭐 돼?




📚

📌

📚 프로젝션

  • 프로젝션이란 select 절에 조회할 대상을 지정하는 것을 의미해요.

📌 예제

select m from Member m 	
// Member 엔티티 조회
select m.team from Member m
// Member와 관련된 team을 조회
select m.username, m.age from Member m
// Member엔티티에 있는 username, age 를 조회




📚 페이징 처리

⚫ setFirstResult(int startPoing)

: 조회 시작 위치(0부터 시작)

⚫ setMaxResults(int maxResult)

: 조회할 데이터 수로 몇 번째부터 몇 개 가지고 올지 정할 수 있어요.

package com.koreait.jpql;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import com.koreait.jpql.domain.Address;
import com.koreait.jpql.domain.Member;
import com.koreait.jpql.domain.Team;

public class JpaMain5 {

	public static void main(String[] args) {

		EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
		EntityManager em = emf.createEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		
		try {
			for(int i = 0; i < 100; i++) {
				Member member = new Member();
				member.setUsername("member " + i);
				member.setAge(i);
				em.persist(member);	
			}
			
			em.flush();
			em.clear();
			
			// 페이징 처리
			String jpql = "select m from Member m order by m.id";
			List<Member> resultList = em.createQuery(jpql, Member.class)
										.setFirstResult(0)
										.setMaxResults(10)
										.getResultList();
			
			System.out.println("result.size : " + resultList.size());
			for(Member m : resultList) {
				System.out.println("m = " + m.toString());
			}
			
			
			tx.commit();			
			
		} catch (Exception e) {
			tx.rollback();			
		}finally {
			em.close();
			emf.close();
		}
		
	}

}




📚 JPA 서브쿼리 한계

  • JPA 표준 스텍으로는 WHERE, HAVING 절에서 서브쿼리 사용이 가능해요. 또한 하이버네이트의 지원으로 SELECT 절에서도 서브쿼리 사용이 가능하지만 현재 JPQL에서는 FROM절의 서브쿼리는 지원하고 있지 않아요.




무사히 적응할 그 날을 기대 ✔️




출처
https://media.giphy.com/media/kyUIknbbDNvID5XzU4/giphy.gif
https://media.giphy.com/media/A6aHBCFqlE0Rq/giphy.gif

0개의 댓글