지금까지 계속 뭔가 테스트와 하이버네이트에 흥미를 붙이긴 위한 소스만을 썼다면 드디어 이제 제대로 된 강좌를 만들어볼까 합니다. (하지만 이것도 타국의 영상 번역정도에 불과하다는....;;;)
HQL! Hibernate Query Language 설명부터 들어갑니다!
본 영상은 맨밑 하단의 참조영상의 외국 튜토리얼 두개짜리를 짧게 한국말로 풀어만든 것에 불과합니다.
더 깊게 공부하실 분은 참조링크 혹은 서적을 참고해주시면 되겠습니다 :)
더 깊게 공부하실 분은 참조링크 혹은 서적을 참고해주시면 되겠습니다 :)
오늘 공부 : 기존의 SQL을 하이버네이트 쿼리 랭귀지로 바꿔보고, SQL Injection을 막는 방법으로, HQL에 동적 변수를 매핑하는 방법을 배워봅니다.
참고 링크 :
하이버네이트 docs HQL 편:
https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html
MKyong.com 튜토리얼 : http://www.mkyong.com/hibernate/hibernate-query-examples-hql/
참조영상 (이번 영상은 거의 참조영상의 번역과 시간줄인 것에 가까움)
HQL 소개 http://www.youtube.com/watch?v=Em4M2tUn1bU&list=PL5757A5DB24A40BDC&index=25
HQL 과 sql바인딩 : http://www.youtube.com/watch?v=PiahhQ0Qkak&list=PL5757A5DB24A40BDC&index=27
소스
UserDetail 소스..(이것도 적어야할까요;; 음.)
package chap06.hql; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class UserDetail { @Id @GeneratedValue private int id; private String userName; public UserDetail() { } public UserDetail(String userName) { super(); this.userName = userName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserDetail [id=" + id + ", userName=" + userName + "]"; } }
테스트 소스
@Test public void test() { DaoCommon<UserDetail> daoUserDetail = new DaoCommon<UserDetail>(UserDetail.class); for(int i=0; i<10;i++){ daoUserDetail.insert(new UserDetail("User"+i)); } SessionFactory factory = HibernateTestUtil.getSessionFactory(UserDetail.class); Session session = factory.getCurrentSession(); session.beginTransaction(); //String minUserid= "5 or 1=1"; //Query query = session.createQuery("from UserDetail where id> "+minUserid); /*Query query = session.createQuery("from UserDetail where id> ? and userName = ?"); String minUserid= "5"; query.setInteger(0, Integer.parseInt(minUserid)); query.setString(1, "User9");*/ String minUserid= "5"; Query query = session.createQuery("from UserDetail where id> :userId and userName = :userName"); query.setInteger("userId", Integer.parseInt(minUserid)); query.setString("userName", "User9"); List<UserDetail> list = query.list(); session.getTransaction().commit(); for (UserDetail userDetail : list) { System.out.println(userDetail); } }