JPQL - ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ
์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ ๊ฒ
JPQL ์ ๊ฒฐ๊ตญ SQL๋ก ๋ณํ๋๋ค.
"select m From Member m where m.age > 18"
์ํฐํฐ์ ์์ฑ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ค. ( Member , age )
JPQL ํค์๋๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค ( SELECT , FROM , where )
JPQL ์ ํ ์ด๋ธ ์ด๋ฆ์ด ์๋ ์ํฐํฐ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ( Member )
๋ณ์นญ์ ํ์์ด๋ค. ( Member as m ) as ๋ ์๋ต๊ฐ๋ฅํ๋ค .
TypeQuery, Query
TypedQuery<Member> query1 = em.createQuery("select m from Member m ", Member.class);
TypeQuey : ๋ฐํ ํ์ ์ด ๋ช ํํ ๋ ์ฌ์ฉํ๋ค.
Query query2 = em.createQuery("select m.username, m.age from Member m");
Query : ๋ฐํ ํ์ ์ด ๋ช ํํ์ง ์์ ๋ ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ ์กฐํ API
query.getResultList();
getResultList() : ๊ฒฐ๊ณผ๊ฐ ํ๋ ์ด์์ผ ๋ , ๋ฆฌ์คํธ ๋ฐํ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ค.
( NPE ๊ฑฑ์ ํ ํ์ ์๋ค )
query.getSingleResult();
getSingleResult() : ๊ฒฐ๊ณผ๊ฐ ์ ํํ ํ๋๋ฅผ ๋ฐํํ๋ค . ๋จ์ผ ๊ฐ์ฒด ๋ฐํ
๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด javax.persistence.NoResultException
๋ ์ด์์ด๋ฉด javax.persistence.NonUniqueResultException
ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ
em.createQuery("select m from Member m where m.username = :username", Member.class)
.setParameter("username","member1")
.getSingleResult();
์ฟผ๋ฆฌ์ ์์ฑ๋๋ ํน์ ์์ฑ์ ๋งค๊ฐ๋ณ์๋ก ๋งคํํ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ฆ ๊ธฐ์ค ๋ฐ์ธ๋ฉ์ =: ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋ก์ ์ (SELECT)
SELECT ์ ์ ์กฐํํ ๋์์ ์ง์ ํ๋ ๊ฒ์ด๋ค.
ํ๋ก์ ์ ์ ๋์
์ํฐํฐ ํ๋ก์ ์
SLECET m FROM Member m
์ํฐํฐ ํ๋ก์ ์
SLECET m.team FROM Member m
์๋ฒ ๋๋ ํ์ ํ๋ก์ ์
SLECET m.address FROM Member m
์ค์นผ๋ผ ํ์ ํ๋ก์ ์ ( ์ซ์, ๋ฌธ์๋ฑ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ )
SLECET m.username, m.age FROM Member m
DISTINCT ๋ก ์ค๋ณต์ ์ ๊ฑฐํ ์ ์๋ค.
SELECT DISTINCT m.username FROM Member m
์ฌ๋ฌ๊ฐ ์กฐํ
Query query = em.createQuery("select m.username, m.age from Member m");
์ฌ๋ฌ๊ฐ์ผ๋ก ์กฐํํ์ ๋๋ TypedQuery๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , Query๋ง ์ฌ์ฉํ ์ ์๋ค.
List<Object[]> resultList = query.getResultList();
for(Object[] row : resultList){
String username = (String)row[0];
Integer age = (Integer)row[1];
Team team = (Team)row[2];
}
Object[] ํ์ ์ผ๋ก ์กฐํํ ์๋ ์๋ค.
TypedQuery<UserDTO> query =
em.createQuery("SELECT NEW com.joont.dto.UserDTO(m.username, m.age, m.team) FROM Member m", UserDTO.class);
List<UserDTO> resultList = query.getResultList();
NEW ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด Object[] ๋์ ๋ฐ๋ก ๊ฐ์ฒด๋ก ์์ฑํด์ ๋ฐ์๋ณผ ์ ์๋ค.
- ํจํค์ง๋ช ์ ํฌํจํ ํด๋์ค๋ช ์ ์ ๋ ฅํด์ผ ํ๋ค.
- ์์์ ํ์ ์ด ์ผ์นํ๋ ์์ฑ์๊ฐ ํ์ํ๋ค.
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ
www.inflearn.com