2.1 ์ฟผ๋ฆฌ ํด๋์ค ์๊ฐ
๊ทธ๋ฐ๋ฐ ๋ ๋ค๋ฅธ ์ค์ํ ์ ์ ์ฟผ๋ฆฌ ๋์ฐ๋ฏธ ํด๋์ค์ ๋๋ค. ์ด ์์์ ๋ณผ ์ ์์ต๋๋ค.
public List<Employee> getAllEmployes() {
try (Session session = sessionFactory.openSession()) {
Query<Employee> query = session.createQuery("from Employee", Employee.class);
return query.list();
}
}
์ค์ ๋ก Query๋ ์ธํฐํ์ด์ค์ด๋ฉฐ ๋ค์ํ ๊ฒฝ์ฐ์ ๋ํ ์ฌ๋ฌ ๊ตฌํ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋จํ๊ฒ ํ๊ธฐ ์ํด ๊ณ์ํด์ ํด๋์ค๋ผ๊ณ ๋ถ๋ฅด๊ฒ ์ต๋๋ค. ์ด๊ฒ์ OOP ์ธก๋ฉด์์ ๋์ ์๋ฏธ์ ํด๋์ค์ ๋๋ค.
๋ฉ๋ชจ. ์ด์ ์๋ ๋ ๊ฐ์ ํด๋์ค๊ฐ ์์์ต๋๋ค.
- ์ฟผ๋ฆฌ๋ฅผ ์ค๋ช ํ๋ ์ฟผ๋ฆฌ์ ๋๋ค .
- ์๋ ค์ง ์ ํ์ ์ฟผ๋ฆฌ๋ฅผ ์ค๋ช ํ๋ TypedQuery .
์ฒซ ๋ฒ์งธ๋ Hibernate๊ฐ ์ด๋ฏธ ์กด์ฌํ๊ณ ์ ๋ค๋ฆญ์ด ์์ง ์์ ๋ ๋ํ๋ฌ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ JDK 5 ๋ฆด๋ฆฌ์ค ์ดํ Hibernate - TypedQuery์ ์ด๋ฏธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ํ์ดํ์ ์ง์ํ๋ ๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
ํ์ง๋ง ๋ด๊ฐ ๊ธฐ์ตํ๋ ํ, Hibernate 5๋ฒ์งธ ๋ฒ์ ๋ถํฐ Typed ํด๋์ค๊ฐ ํ๋๋ง ๋จ์๊ณ ์ด์ Query๋ผ๊ณ ํฉ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ๋ง๋๋ ํ์ค ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Query<Employee> query = session.createQuery("from Employee", Employee.class);
์ฟผ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ง๋ง ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์คํํฉ๋๊น?
์ฌ๊ธฐ์๋ ํจ์ฌ ๋ ๊ฐ๋จํฉ๋๋ค. Query ๊ฐ์ฒด์์ list() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
Query<Employee> query = session.createQuery("from Employee", Employee.class);
List<Employee> resultLัst = query.list();
list() ๋ฉ์๋์๋ ๋์ผํ ์์ ์ ์ํํ์ง๋ง getResultList() ๋ผ๊ณ ํ๋ ๋ฉ์๋์ธ JPA ๋์์ด๊ฐ ์์ต๋๋ค . ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋์์ ๊ฐ๋ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฟผ๋ฆฌ๊ฐ ๊ฒฐ๊ณผ๊ฐ ๋จ์ผ ๊ฒฐ๊ณผ์ ์์์ ์์ํ๋ ๊ฒฝ์ฐ uniqueResult() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค .
Query<Employee> query = session.createQuery("from Employee where id = 1", Employee.class);
Employee result = query.uniqueResult();
uniqueResult() ๋ฉ์๋์๋ JPA ๋์์ด์ธ singleResult() ๋ฉ์๋๊ฐ ์์ต๋๋ค . JPA ํ์ค๊ณผ Hibernate์ ํธํ์ฑ์ ์ํด ๋์ ๋์์ต๋๋ค. ๊ทธ๋ ๋๊ฐ์ ์ผ์ ํฉ๋๋ค.
2.2 ์ฟผ๋ฆฌ ํด๋์ค ๋ฉ์๋
์ค์ ๋ก Query ํด๋์ค์๋ ๋ค์ํ ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์๋์์ ๋๋ ๊ทธ๋ค ์ค ์ธ ๊ฐ์ง์ ๋ํด ๋ ์ด์ผ๊ธฐ ํ ๊ฒ์ ๋๋ค.
์ฒซ ๋ฒ์งธ๋ stream() ๋ฉ์๋์ ๋๋ค . ๊ทธ๋ฆฌ๊ณ JPA ๋์์ด getResultStream() ์ ๋๋ค .
์ด ๋ ๋ฉ์๋๋ ๋ชจ๋ ๋ชฉ๋ก ๋์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฐํํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ก ์ป์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ํ ๋ฒ์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋งค์ฐ ํจ์จ์ ์ผ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ค ์ค ์ฒซ ๋ฒ์งธ๋ง ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
์:
Query<Employee> query = session.createQuery("from Employee where id > 100", Employee.class);
Stream<Employee> stream = query.stream();
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ executeUpdate() ๋ฐฉ๋ฒ์ ๋๋ค . ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ Hibernate๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ๋ ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ ์ฌ์ฉํ์ง ์์ ํ์๊ฐ ์๋ค.
์์ฒญ ์: ๋ชจ๋ ์ฌ์ฉ์์ ๋ ๋ฒจ์ 1 ์ฌ๋ฆฌ๊ธฐ๋ก ํ์ต๋๋ค.
Query<User> query = session.createQuery("update User set level=level+1", User.class);
int count = query.executeUpdate();
executeUpdate() ๋ฉ์๋๋ ์ค์ ๋ก ์์ ๋ ํ ์๋ฅผ ๋ฐํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ธ ๋ฒ์งธ ๋ฐฉ๋ฒ์ scroll() ์ ๋๋ค . ๊ทธ๊ฒ์ ๋ํด ์กฐ๊ธ ๋ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
2.3 ์คํฌ๋กค ํด๋์ค ๋ฉ์๋
์ด ๋ฉ์๋๋ stream() ๋ฉ์๋ ์ ๋ค์ ์ ์ฌํฉ๋๋ค . ๊ฒฐ๊ณผ๋ฅผ ์ ํ ๊บผ๋ด์ง ์๊ณ ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ์ด๋ํ ์ ์์ต๋๋ค. ์ฆ, ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ค์ ๊ฒฐ๊ณผ์ ๋ฐฑ๋ง ๋ฒ์งธ ์ค๋ก ์คํฌ๋กคํ๊ณ ๊ฑฐ๊ธฐ์์ ๋ฐ์ดํฐ ์ฝ๊ธฐ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ ๊ธ ๋ฐ๋ณต์์ ๋๋ค.
Query<Employee> query = session.createQuery("from Employee where id > 100", Employee.class);
ScrollableResults<Employee> scroll = query.scroll();
ScrollableResults ๊ฐ์ฒด์๋ ๋ค์ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
๋ฐฉ๋ฒ | ์ค๋ช |
---|---|
์๋ฅด๋ฐ์ดํธ() | ํ์ฌ ์์๋ฅผ ๋ฐํ |
๋ค์() | ํฌ์ธํฐ๋ฅผ ๋ค์ ์์๋ก ์ด๋ |
์ด์ ์() | ํฌ์ธํฐ๋ฅผ ์ด์ ์์ ๋ก ์ด๋ |
์คํฌ๋กค(์ ์ ํฌ๊ธฐ) | ํฌ๊ธฐ ์ ์ ๊ธฐ์ค์ผ๋ก ์์ผ๋ก ์คํฌ๋กค |
์์น(์ ์ ์์น) | ์์ ์์น ๋ฒํธ๋ฅผ ํ์ฌ ์์๋ก ๋ง๋ญ๋๋ค. |
๋ง์ง๋ง() | ํ์ฌ ์์๋ ์ด์ ๋ง์ง๋ง ์์ ์ ๋๋ค. |
์ฒซ ๋ฒ์งธ() | ํ์ฌ ์์๋ ์ด์ ์ฒซ ๋ฒ์งธ ์์ ์ ๋๋ค. |
getRowNumber() | ํ์ฌ ์ค ๋ฒํธ๋ฅผ ๋ฐํ |
setRowNumber() | ํ์ฌ ์ค ๋ฒํธ ์ค์ |
์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Query<Employee> query = session.createQuery("from Employee where id > 100", Employee.class);
ScrollableResults<Employee> scroll = query.scroll();
scroll.last();
Employee lastEmployee = scroll.get();
GO TO FULL VERSION