ํ์ด์ง API
ํ์ด์ง์ด๋?
ํ์ด์ง์ด๋ ํ ํ๋ฉด์์ ๋ณด์ฌ์ฃผ๋ ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ์ผ๋ จ์ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
ํ์ด์ง์ ์ฌ์ฉ์๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ ๋, ์ ์ฒด ๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํํ ์ ํ๋ ์ผ๋ฐ์ ์ธ ์น ๊ฒ์ํ์ด๋ ์กฐํ ํ๋ฉด์ ์๊ฐํ๋ฉด ๋๋ค.
์กฐํ ๋์ ๋ฐ์ดํฐ๊ฐ 10๋ง ๊ฑด์ด๋ผ๋ฉด ํ ํ๋ฉด์์ ๋ชจ๋ ๋ณด์ฌ ์ค ์๋ ์๋ค.
ํ ํ๋ฉด์์ ๋ณด์ฌ์ค ์ ์๋ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ํ์ด์ง์ด๋ค.
JPA ๋ ํ์ด์ง์ ๋ API๋ก ์ถ์ํํ์๋ค.
List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
.setFirstResult(0)
.setMaxResults(10)
.getResultList();
setFirstResult(int startPosition) : ์กฐํ ์์ ์์น(0๋ถํฐ ์์)
setMaxResults(int maxResult) : ์กฐํํ ๋ฐ์ดํฐ ์
์กฐ์ธ(JOIN)
์กฐ์ธ ๊ธฐ์ด ๊ฐ๋

์กฐ์ธ(JOIN)
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์๋ก ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋ ๊ฐ์ ํ ์ด๋ธ์ ๋ง์น ํ๋์ ํ ์ด๋ธ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ฌ์ค๋ค.
๋ด๋ถ ์กฐ์ธ(INNER JOIN)
๋ ํ ์ด๋ธ์ ๋ด๋ถ ์กฐ์ธ์ ์ ์ฉํ๋ฉด ๋ ํ ์ด๋ธ์์ ๊ณตํต์ ์ธ ๋ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค.
์ธ๋ถ ์กฐ์ธ(OUTER JOIN)
๋ ํ ์ด๋ธ์ ์กฐ์ธํ๊ณ ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ์ ์ ์ฉํ๋ฉด ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๊ฐ ๋ฐํ๋๊ณ
์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์ผ์นํ๋ ๋ ์ฝ๋๊ฐ ๋ฐํ๋ฉ๋๋ค.
๋ด๋ถ ์กฐ์ธ
select m from Member m join m.team t
์ธ๋ถ ์กฐ์ธ
select m from Member m left join m.team t
์ธํ ์กฐ์ธ
select m from Member m, Team t where m.username = t.name
ON ์
์กฐ์ธ๋ฌธ์ ์ฌ์ฉํ ๋ ON์ ์ ์ด์ฉํด์ ํด๋น ์กฐ๊ฑด์ผ๋ก ํ ์ด๋ธ ์กฐ์ธ์ ํ ์ ์๋ค.
join ๋์์ ํํฐ๋ง ํ ์ ์๋ค.
์) ํ์๊ณผ ํ์ ์กฐ์ธํ๋ฉด์, ํ ์ด๋ฆ์ด A์ธ ํ๋ง ์กฐ์ธ
JPQL
select m,t from Member m left join m.team t on t.name ='A'
SQL
SELECT m.*, t.* FROM
Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'
์๋ธ ์ฟผ๋ฆฌ
select m from Member m
where m.age > (select avg(m2.age) from Member m2)
ํ๋์ SQL ๋ฌธ์ ํฌํจ๋์ด ์๋ ๋ ๋ค๋ฅธ SQL ๋ฌธ์ ๋งํฉ๋๋ค.
์๋ธ ์ฟผ๋ฆฌ ์ง์ ํจ์
EXISTS
select m from Member m
where exists (select t from m.team t where t.name = ‘ํA')
exists(subquery) : ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํ๋ฉด ์ฐธ์ด๋ค.
ํA ์์์ธ ํ์
ALL
select o from Order o
where o.orderAmount > ALL (select p.stockAmount from Product p)
๋ชจ๋ ๋ง์กฑํ๋ฉด ์ฐธ์ด๋ค.
์ ์ฒด ์ํ ๊ฐ๊ฐ์ ์ฌ๊ณ ๋ณด๋ค ์ฃผ๋ฌธ๋์ด ๋ง์ ์ฃผ๋ฌธ๋ค
ANY
select m from Member m
where m.team = ANY (select t from Team t)
์กฐ๊ฑด์ ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ์ฐธ์ด๋ค.
์ด๋ค ํ์ด๋ ํ์ ์์๋ ํ์
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ
www.inflearn.com