4.1 ์์ฒญ ๋งค๊ฐ๋ณ์
Hibernate๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ชจ๋ ์์ ์ด ํฌ๊ฒ ๋จ์ํ๋ฉ๋๋ค.
๋ณ๊ฒฝํ ์ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์ฐพ๋ ๊ฒ์ ๋งค์ฐ ๋๋ญ ๋๋ค. ์ฒ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ ๋ชฉ๋ก์ ๋ฐํํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํน์ ๋ ์ง์ ํน์ ์ฌ์ฉ์๋ฅผ ์ํ ์ต์ ์ ํ ๋ชฉ๋ก์ด ํ์ํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ํ์ ํ๋๋ณ๋ก ์ ๋ ฌ๋๋ฉฐ ์์ง ์ ์ฒด ๋ชฉ๋ก์ด ์๋๋ผ ํน์ ํ์ด์ง(์: 21์์ 30๊น์ง์ ์ ํ)๋ก ์ ๋ ฌ๋ฉ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๋งค๊ฐ๋ณ์ํ๋ ์ฟผ๋ฆฌ๊ฐ ํด๊ฒฐํ๋ ๊ฒ์ ๋๋ค. HQL์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ค์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ "ํน์ ์ด๋ฆ"์ธ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ๊ฟ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ฒญ์ ์คํํ ๋ ๋ณ๋๋ก ์ด๋ฌํ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ์ ๋ฌํ ์ ์์ต๋๋ค.
ํน์ ์ด๋ฆ์ ๊ฐ์ง ์ฌ์ฉ์์ ๋ชจ๋ ์์ ์ ๋ฐํํ๋ HQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
from EmployeeTask where employee.name = "Ivan Ivanovich"
์ด์ ์ด๋ฆ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊พธ๊ฒ ์ต๋๋ค.
from EmployeeTask where employee.name = :username
์์ ์ ์ฐพ๊ธฐ ์ํ Java ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
String hql = "from EmployeeTask where employee.name = :username";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter("username", "Ivan Ivanovich");
List<EmployeeTask> resultLIst = query.list();
๋ํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ ๋์ ์ซ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
String hql = "from EmployeeTask where employee.name = :1";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(1, "Ivan Ivanovich");
List<EmployeeTask> resultLIst = query.list();
๋ฌผ๋ก ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ง๋ง ์ด๋ฌํ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
4.2 setParameterList() ๋ฉ์๋.
๋งค๊ฐ๋ณ์ ๊ฐ์ด ํ๋๊ฐ ์๋๋ผ ๊ฐ์ฒด ๋ชฉ๋ก์ ๋ํ๋ด๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ง์์ ์ง์ ์ด ํน์ ๋ชฉ๋ก์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค.
์ด๋ป๊ฒ ํ ์ ์์ต๋๊น?
String hql = "from EmployeeTask where occupation IN (:occupation_list)";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameterList("occupation_list", new String[] {"Programmer", "Tester"});
List<EmployeeTask> resultLIst = query.list();
4๊ฐ์ง ์ ํ์ ๋ชฉ๋ก์ ๋งค๊ฐ๋ณ์ ๊ฐ์ผ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ๋ฐฐ์ด: Object[]
- ์ปฌ๋ ์ : ์ปฌ๋ ์
- ํ์ํ๋ ๋ฐฐ์ด: T[]
- ์ ๋ ฅ๋ ๋ชจ์: Collection<T>
์ ํ์ด ์ง์ ๋ ์ปฌ๋ ์ ์ด๋ ๋ฐฐ์ด์ ์ ๋ฌํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ํ์ ์ธ ๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํด์ผ ํฉ๋๋ค. ์:
String hql = "from EmployeeTask where occupation IN (:occupation_list)";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameterList("occupation_list", new String[] {"Programmer", "Tester"}, String.class);
List<EmployeeTask> resultLIst = query.list();
๋ชฉ๋ก ๋งค๊ฐ๋ณ์๋ก ์์ ํ ๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ ๋์ ์ซ์๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ๋งํ์ง๋ง ์ด๋ฆ์ด ๋ ํธ๋ฆฌํฉ๋๋ค.
4.3 SQL ์ธ์ ์ ์ ๋ํ ๋ณดํธ
๋งค๊ฐ๋ณ์์ ๊ฐ์ฅ ์ค์ํ ๋ชฉ์ ์ค ํ๋๋ SQL ์ฃผ์ ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณดํธํ๋ ๊ฒ์ ๋๋ค. ๋ง์ ์ด๋ณด ํ๋ก๊ทธ๋๋จธ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋จ์ํ ์ฌ๋ฌ ๋ถ๋ถ์ ๋ฌธ์์ด์ ํจ๊ป ๋ถ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ ๋์ :
String hql = "from EmployeeTask where employee.name = :username";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter("username", "Ivan Ivanovich");
List<EmployeeTask> resultLIst = query.list();
๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
String hql = "from EmployeeTask where employee.name = " + "Ivan Ivanovich";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
List<EmployeeTask> resultLIst = query.list();
์ ๋ ํ์ง๋ง!์ฌ๋ฌ ๋ถ๋ถ์์ SQL/HQL ์ฟผ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ง ๋ง์ญ์์ค. ์กฐ๋ง๊ฐ ์ฌ์ฉ์ ์ด๋ฆ์ด ํด๋ผ์ด์ธํธ์์ ์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์
ํ ํด์ปค๋ ๋น์ ์๊ฒ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์์ด์ ์ค ๊ฒ์
๋๋ค.""Ivan"; DROP TABLE user;"
๊ทธ๋ฐ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ํ์์ ์ทจํฉ๋๋ค.
from EmployeeTask where employee.name = "Ivan"; DROP TABLE user;
๋ฐ์ดํฐ๊ฐ ๋จ์ํ ์ญ์ ๋๋ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ์ข์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์๋ ์์ต๋๋ค.
from EmployeeTask where employee.name = "Ivan";
UPDATE user SET password = '1' WHERE user.role = 'admin'
๋๋ ๋ค์๊ณผ ๊ฐ์ด:
from EmployeeTask where employee.name = "Ivan";
UPDATE user SET role = 'admin' WHERE user.id = 123;

GO TO FULL VERSION