프로젝트 git url | github.com/rtef23/JpaStudy |
필요 | 1. docker 2. docker-compose |
프로젝트 정보 | mysql : 5.7 - docker image java : 1.8 |
프로젝션
- JPQL로 조회된 엔티티는 영속성 컨텍스트에 의해 관리된다.
- Select 절에 조회할 대상을 지정하는 것
엔티티
- [JPQL] SELECT m FROM Member m
- [SQL] SELECT * FROM Member
- [JPQL] SELECT m.team FROM Member m
- [JPQL] SELECT m.team FROM Member m JOIN Team t
- [SQL] SELECT t.* FROM Member m INNER JOIN Team t ON m.team_id = t.id
임베디드 타입
- [SQL] SELECT o.address FROM Order o
- [JPQL] SELECT o.city, o.street, o.zipcode FROM Order o
스칼라 타입(숫자, 문자등 기본 데이터 타입)
- TypedQuery가 아닌 Query로 조회해야 한다.
- [SQL] SELECT m.username, m.age FROM Member m
- [JPQL] SELECT m.username, m.age FROM Member m
스칼라 타입 - 여러 값 조회
- Query 타입으로 조회
List results = entityManager.createQuery("select m.username, m.age from Member m").getResultList();
Object[] resultObjects = (Object[]) results.get(0);
System.out.println("resultObjects[0] : " + resultObjects[0]);
System.out.println("resultObjects[1] : " + resultObjects[1]);
/* 출력
resultObjects[0] : name-1
resultObjects[1] : 10
*/
- Object[] 타입으로 조회
List<Object[]> results = entityManager.createQuery("select m.username, m.age from Member m").getResultList();
Object[] resultObjects = results.get(0);
System.out.println("resultObjects[0] : " + resultObjects[0]);
System.out.println("resultObjects[1] : " + resultObjects[1]);
/* 출력
resultObjects[0] : name-1
resultObjects[1] : 10
*/
- new 명령어로 조회
public class MemberDTO {
private String username;
private int age;
public MemberDTO(String username, int age) {
this.username = username;
this.age = age;
}
...
}
List<MemberDTO> results = entityManager.createQuery("select new com.personal.jpastudy.domain10.MemberDTO(m.username, m.age) from Member m", MemberDTO.class).getResultList();
System.out.println("result[0] : " + results.get(0));
/*
result[0] : MemberDTO{username='name-1', age=10}
*/
페이징
- JPA는 페이징을 2개의 API로 추상화
- setFirstResult(int startPosition) ; 조회 시작 위치
- setMaxResults(int maxResult) ; 조회할 데이터 수
List<Member> members =
entityManager
.createQuery("select m from Member m order by m.age desc", Member.class)
.setFirstResult(0)
.setMaxResults(10)
.getResultList();
System.out.println(members.toString().replace("},", "},\n"));
/* 출력
[Member{id=10, username='name-9', age=9},
Member{id=9, username='name-8', age=8},
Member{id=8, username='name-7', age=7},
Member{id=7, username='name-6', age=6},
Member{id=6, username='name-5', age=5},
Member{id=5, username='name-4', age=4},
Member{id=4, username='name-3', age=3},
Member{id=3, username='name-2', age=2},
Member{id=2, username='name-1', age=1},
Member{id=1, username='name-0', age=0}]
*/
'JPA' 카테고리의 다른 글
[JPA] 24. JPQL - 타입 표현, 기타식 (0) | 2021.01.31 |
---|---|
[JPA] 23. JPQL - 조인, 서브 쿼리 (0) | 2021.01.31 |
[JPA] 21. JPQL - 기본 문법 1 (0) | 2021.01.26 |
[JPA] 20. JPA 쿼리 방법 소개 (0) | 2021.01.25 |
[JPA] 19. 값 타입 컬렉션 (0) | 2021.01.23 |