ํ์ด์ง ์์ : LIMIT ๋ฐ OFFSET
๋งค์ฐ ์์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ "ํ์ด์ง"์์ ๊ฒ์๋ฉ๋๋ค. ํฐ ๋ชฉ๋ก์ผ๋ก ์์ ํ๋ ๊ฒ์ด ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋จผ์ ํ 1์์ 20๊น์ง ์ฟผ๋ฆฌํ ๋ค์ 21์์ 40๊น์ง ์ฟผ๋ฆฌํฉ๋๋ค.
์ด๊ฒ์ SQL์ ์ด LIMIT ๋ฐ OFFSET์ ๋ํ ํน์ ์ฐ์ฐ์๊ฐ ์๋ ์ผ๋ฐ์ ์ธ ์ํฉ์ ๋๋ค.
์ด๋ฌํ ์ฐ์ฐ์์ ์๋ ๋ก๊ทธ๋ Hibernate์๋ ์์ต๋๋ค. ๊ทธ๋ค์ ์ฆ์ ๋ณ๋์ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- setFirstResult() ๋ OFFSET ๊ณผ ์ ์ฌํฉ๋๋ค .
- setMaxResults() ๋ LIMIT ์ ์ ์ฌํฉ๋๋ค .
์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. 41๋ถํฐ ์์ํ์ฌ 20๊ฐ์ ์์ ์ ๋ฐํํ๋๋ก ์์ฒญํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
Query<EmployeeTask> query = session.createQuery( โfrom EmployeeTaskโ, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
๊ฒฐ๊ณผ ์ ๋ ฌ
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ์ผ๋ถ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์์๋์ต๋๋ค. ๋ค์ ์๊ธํ ๋ฌธ์ ๋ ์ ๋ ฌ์ ๋๋ค.
Hibernate์์์ ์ ๋ ฌ์ HQL ์ฟผ๋ฆฌ์ ์ง์ ์์ฑ๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์์๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
from Employee order by joinDate
์ ๋ ฌ ์์๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ต์ํ ๋จ์ด์ธ asc ๋ฐ desc๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์:
from Employee order by joinDate desc
SQL์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๋ฌ ํ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ์ ์์ต๋๋ค.
from Employee order by joinDate desc, name asc
๋ํ ์ ๋ ฌ ํ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(โusernameโ, โIvan Ivanovichโ);
query.setParameter(โordโ, โnameโ);
List<EmployeeTask> resultLIst = query.list();
HQL์ ๊ธฐ๋ฅ
HQL์ SQL๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์์ HQL์ด ์ง์ํ๋ ์ง๊ณ ํจ์ ๋ชฉ๋ก์ ๋๋ค .
์ง๊ณ ํจ์ | ์ค๋ช |
---|---|
์ธ๋ค() | ํ ์๋ฅผ ๋ฐํํฉ๋๋ค. |
ํฉ์งํฉ() | ๊ฐ์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค. |
๋ถ() | ์ต์๊ฐ์ ๋ฐํํฉ๋๋ค. |
์ต๋() | ์ต๋๊ฐ์ ๋ฐํํฉ๋๋ค. |
ํ๊ท () | ํ๊ท ์ ๋ฐํ |
์ ๊ธฐ์ตํ๊ณ ์๋ฏ์ด ์ง๊ณ ํจ์๋ group by์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ํจ์์ ๋๋ค. Group By๋ SQL์์์ ์ ํํ ๋์ผํ๊ฒ ์๋ํ๋ฏ๋ก ๋ฐ๋ณตํ์ง ์๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ์ผ๋ฐ์ ์ธ ๊ธฐ๋ฅ . ์ผ๋ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ด ํจ์ฌ ๊ฐ๋จํฉ๋๋ค. SQL ์๋ฒ์์ ์ํ๋๋ฉฐ Hibernate๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ Hibernate๋ SQL Server๊ฐ ์ง์ํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ SQL ์๋ฒ์ ์ ํ์ SessionFactory๋ฅผ ๊ตฌ์ฑํ ๋ sqlDialect ๋งค๊ฐ๋ณ์์ ์ํด ์ค์ ๋ฉ๋๋ค.
์ฌ์ฉ์์๊ฒ ํ ๋น๋ ์์ ์ ์๋ฅผ ์ฐพ์๋ด ์๋ค.
String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(โusernameโ, โIvan Ivanovichโ);
Integer count = query.uniqueResult();