JPQL
- Java Persistence Query Language
- ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด. ํ ์ด๋ธ ๋์X ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์O ์ผ๋ก ์ฟผ๋ฆฌ
- SQL์ ์ถ์ฑํํ๋ฏ๋ก ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดํ์ง ์์
- ๊ฒฐ๊ตญ SQL๋ก ๋ณํ
JPQL ๋ฌธ๋ฒ
- select m from Member as m where m.age > 14
- ์ํฐํฐ์ ์์ฑ์ ๋์๋ฌธ์ ๊ตฌ๋ถํจ O(Memeber, age ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๊ฒ๊ณผ ๋์๋ฌธ์ ๋์ผํด์ผ)
- JPQL ํค์๋๋ ๋์๋ฌธ์ ๊ตฌ๋ถํ์ง ์์(SELECT select FROM from WHERE where)
- ์ํฐํฐ ์ด๋ฆ์ ์ฌ์ฉํ๋ค(ํ ์ด๋ธ ์ด๋ฆ์ด ์๋)
- ๋ณ์นญ์ด ํ์ m (as๋ ์๋ต ๊ฐ๋ฅํ์ง๋ง ๊ฐ๊ธ์ ์ฐ๋ฉด ์ข์)
- ์งํฉ, ์ ๋ ฌ ๋ฑ ํจ์ ๊ฐ๋ฅ (COUNT, SUM, AVG, MAX, GROUP BY, ORDER BY ๋ฑ)
TypeQuery
- ๋ฐํํ์ ์ด ๋ช ํํ ๋
TypeQuery<Member> query1 = em.createQuery("select m from Member m", Member.class);
TypeQuery<String> query2 = em.createQuery("select m.username from Member m", String.class);
Query
- ๋ฐํํ์ ์ด ๋ช ํํ์ง ์์ ๋
Query query3 = em.createQuery("select m.username, m.age from Member m");
๊ฒฐ๊ณผ ์กฐํ API
- query.getResultList()
- ๊ฒฐ๊ณผ๊ฐ ํ๋ ์ด์์ผ ๋, ๋ฆฌ์คํธ ๋ฐํ
- ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋น ๋ฆฌ์คํธ ๋ฐํ(NPE ๊ฑฑ์ ์์)
List<Member> resultList = query.getResultList();
- query.getSingleResult()
- ๊ฒฐ๊ณผ๊ฐ ์ ํํ ํ๋, ๋จ์ผ ๊ฐ์ฒด ๋ฐํ
- ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ์์ธ ๋ฐ์ javax.persistence.NoResultException
- ๊ฒฐ๊ณผ๊ฐ ๋ ์ด์์ด๋ฉด ์์ธ ๋ฐ์ javax.persistence.NonUniqueResultException
Member result = query.getSingleResult();
ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ - ์ด๋ฆ ๊ธฐ์ค, ์์น ๊ธฐ์ค
- ์ด๋ฆ๊ธฐ์ค
Member result = em.createQuery(SELECT m FROM Member m where m.username=:username", Member.class)
.setParameter("username", usernameParam)
.getSingleResult();
- ์์น๊ธฐ์ค
- ์ค๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ ๊ฒฝ์ฐ ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ ๊ถ์ฅํ์ง ์์
SELECT m FROM Member m where m.username=?1
query.setParameter(1, usernameParam);
ํ๋ก์ ์
- SELECT ์ ์ ์กฐํํ ๋์์ ์ง์ ํ๋ ๊ฒ
- ํ๋ก์ ์ ๋์: ์ํฐํฐ, ์๋ฒ ๋๋ ํ์ , ์ค์นผ๋ผ ํ์ (์ซ์, ๋ฌธ์๋ฑ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ )
- "SELECT m FROM Member m" -> ์ํฐํฐ ํ๋ก์ ์
- ์ด ์ฟผ๋ฆฌ๋ก ์ฐพ๋ MemberList๋ ๋ชจ๋ ์์์ฑ ์ปจํ ์คํธ๋ก ๊ด๋ฆฌ ๋จ
- "SELECT m.team FROM Member m" -> ์ํฐํฐ ํ๋ก์ ์
- ์ด ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ์ด ์ข์ง ์๊ธฐ ๋๋ฌธ์ ์กฐ์ธ์ ๋ช ์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๊ถ์ฅํจ.
- "SELECT t FROM Member m JOIN m.team t"
- "SELECT o.address FROM Order o" -> ์๋ฒ ๋๋ ํ์
ํ๋ก์ ์
- ํ๊ณ : SELECT a FROM Address ๋ถ๊ฐ๋ฅ. ์ด๋ ์์์ธ์ง ์ํฐํฐ๋ฅผ ๋ช ํํ๊ฒ ์ ํด์ค์ผํจ.
- "SELECT m.username, m.age FROM Member m" -> ์ค์นผ๋ผ ํ์ ํ๋ก์ ์
- DISTINCT๋ก ์ค๋ณต ์ ๊ฑฐ ๊ฐ๋ฅ
ํ๋ก์ ์ - ์ฌ๋ฌ๊ฐ ์กฐํ
- SELECT m.username, m.age FROM Member m
- 1. Query ํ์ ์ผ๋ก ์กฐํ
- 2. Object[] ํ์ ์ผ๋ก ์กฐํ
- 3. new ๋ช
๋ น์ด๋ก ์กฐํ
- ๋จ์ ๊ฐ์ DTO๋ก ๋ฐ๋ก ์กฐํ
- "SELECT new jpabook.jpql.UserDTO(m.username, m.age) FROM Member m"
- ํจํค์ง ๋ช ์ ํฌํจํ ์ ์ฒด ํด๋์ค ๋ช ์ ๋ ฅ์์์ ํ์ ์ด ์ผ์นํ๋ ์์ฑ์ ํ์
ํ์ด์ง API
- JPA๋ ํ์ด์ง์ ๋ค์ ๋ API๋ก ์ถ์ํ
- setFirstResult(int startPosition) : ์กฐํ ์์ ์์น(0๋ถํฐ ์์)
- setMaxResults(int maxResult) : ์กฐํํ ๋ฐ์ดํฐ ์
//ํ์ด์ง ์ฟผ๋ฆฌ
String jpql = "select m from Member m order by m.name desc";
List<Member> resultList = em.createQuery(jpql, Member.class)
.setFirstResult(10)
.setMaxResults(20)
.getResultList();
'๐ฅ๏ธ ๋ฐฑ์๋ > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด - ์ค๊ธ ๋ฌธ๋ฒ(1) (2) | 2023.11.26 |
---|---|
[JPA] ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด - ๊ธฐ๋ณธ๋ฌธ๋ฒ (2) (1) | 2023.11.26 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.5 ์คํ๋ง๋ฐ์ดํฐ JPA (0) | 2023.11.23 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.4 JPA API (0) | 2023.11.23 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.3 ํ ์คํธ, ๋ก๊น , ๋น๋ (1) | 2023.11.23 |