정의select 문에서 특정 데이터를 선택하여 조회하는 행위JPQL 에서 프로젝션사용시원하는 엔티티임베디드 타입스칼라 타입 ⇒ 기본 데이터 타입 말하는겨 ㅇㅇ엔티티 프로젝션쿼리의 결과로 엔티티를 직접 반환함별건 없고회원 엔티티 조회SELECT m FROM Member m회원의 속한 팀 엔티티 조회SELECT m.team FROM Member m임베디드 타입 프로젝션엔티티 내부에 포함된 복합 값 타입을 간접적으로 조회임베디드 타입을 잘못 조회하는 경우SELECT a FROM Address a // 오류, Address는 엔티티가 아니므로 시작점으로 사용될 수 없음올바른 경우엔티티를 통한 임베디드 조회String query = "SELECT o.address FROM Order o"; List address..
사용자에게 데이터를 일정량씩 나눠 보여주는 기법SQL 에서 페이징은 DB마다 다름..복잡성을 추상화 해 일관된 방식으로 페이징 처리를 할 수 있도록 도와주는 API 제공JPA 페이징 API@BeforeEach void setUp() { for (int i = 0; i < 50; i++) { Member member = new Member(); member.setName("ipeac" + i); member.setAge(i); em.persist(member); } } @Test void testPaging() { TypedQuery query = em.createQuery( "select m from Member m order by m.age desc", Member.class ); query.setFi..
집합 함수SQL 의 통계 함수 기능임합계 평균최대값최소값 계산시 사용SELECT COUNT(m), -- 회원 수 SUM(m.age), -- 나이 합계 AVG(m.age), -- 평균 나이 MAX(m.age), -- 최대 나이 MIN(m.age) -- 최소 나이 FROM Member mCOUNT: 결과 수를 구합니다. 반환 타입은 Long입니다.MAX, MIN: 최대, 최소 값을 구합니다. 문자, 숫자, 날짜 등에 사용할 수 있습니다.AVG: 평균값을 구합니다. 숫자 타입만 사용 가능하며, 반환 타입은 Double입니다.SUM: 합계를 구합니다. 숫자 타입만 사용 가능하며, 반환 타입은 타입에 따라 Long, Double, BigInteger, BigDecimal 등이 될 수 있습니다.집합 함수 사용 시 ..
내부조인연관 엔티티 중 겹치는 부분만 결과로 들고온다INNERT JOIN 키워드를 사용JOIN 만 써도 된다.@Autowired private EntityManager em; @BeforeEach void setUp() { // 팀만들어주기 Team team = new Team(); team.setName("팀A"); em.persist(team); // 멤버 50개 만들어주기 for (int i = 0; i < 50; i++) { Member member = new Member(); member.setName("ipeac" + i); member.setAge(i); if (i % 2 == 0) { member.setTeam(team); } em.persist(member); } } @Test void ..
페치 조인 사용법JOIN FETCH 구문으로 연관 엔티티를 즉시 로딩JPQL은 연관 엔티티를 단순한 조인이 아니라즉시 로딩할 엔티티로 처리함@Test void testFetchJoin() { String jpql = "select m from Member m join fetch m.teams"; List resultList = em.createQuery(jpql, Member.class) .getResultList(); System.out.println("resultList = " + resultList); }페치 조인으로 팀을 조회한 경우팀 엔티티는 프록시 객체가 아니라실제 엔티티임.지연로딩이 발생하지 않는 것임.장점성능의 최적화페치 조인을 사용시 필요한 엔티티를 미리 로딩할 수 있음나중에 엔티티 접근..
컬렉션 페치 조인일대다 관계인 컬렉션을 함께 조회시 사용한다.연관된 엔티티들을 한번의 쿼리로 가져올 수 있음예시SELECT t FROM Team t JOIN FETCH t.members WHERE t.name = '팀A'실행된 SQLSELECT T.*, M.* FROM TEAM T INNER JOIN MEMBER M ON T.ID = M.TEAM_ID WHERE T.NAME = '팀A'TEAM 테이블과 MEMEBER 테이블을 내부 조인하여 팀A 에 소속된 모든 회원을 조회함@BeforeEach void setUp() { List teams = new ArrayList(); Team team = new Team(); team.setName("팀1"); em.persist(team); // 팀만들어주기 //..