Whiteship's Note

8.2.2. HQL 공부하기 - where절



가장 간단하게 Where 절을 사용한 HQL은 다음과 같습니다.
s.createQuery("from Member m where m.name = '기선'");

위에서 '기선'과 같은 부분을 파라미터화 하는 방법에는 두 가지가 있습니다.
1. ? 를 사용하는 방법과
2. :를 사용하는 방법이 있습니다.

1. s.createQuery("from Member m where m.name = ? "); 이렇게 파라미터화 할 부분을 ? 로 표시하고 fluent interface 형태로 구현해 놓았기 때문에 뒤에 연달아서 .setParameter(0, "기선"); 을 덧 붙여 주면 됩니다.

2. s.createQuery("from Member m where m.name = :name "); 이렇게 :뒤에 변수 처럼 사용할 이름을 적어주고 .setParameter("name", "기선"); 이렇게 덧붙여 주면 됩니다. 파라미터가 여러개라면 이렇게 이름을 줘서 사용하는 것이 가독성이 좋을 듯 합니다.
이 때 파라미터의 타입을 명확히 주고 싶다면 setString과 같은 메소드를 setParameter대신에 사용하면 됩니다.

3. and 를 사용해서 여러 개의 조건을 줄 수도 있습니다.
이 때 여러 개의 조건을 줄 때 쿼리 결과를 최소한으로 줄여주는 조건문을 앞에 두는 것이 좋습니다.

public void testWhereHQL(){

       insertDatas();

       q = s.createQuery("select m from k_Member m where name='keesun'");

       assertEquals(1, q.list().size());

       //1

       q = s.createQuery("select m from k_Member m where name = ?")

              .setParameter(0, "keesun");

       assertEquals(1, q.list().size());

       //2

       q = s.createQuery("select m from k_Member m where name = :name")

              .setParameter("name", "keesun");

       assertEquals(1, q.list().size());

       //3

       q = s.createQuery("select m from k_Member m where name like :name and email like :email")

              .setString("name", "%a%")

              .setString("email", "%os.net");

       assertEquals(2, q.list().size());

}

'Hibernate > 주소록 만들기' 카테고리의 다른 글

8.4. 기능 구현  (0) 2007.01.25
8.3. Criteria 공부하기  (0) 2007.01.25
8.2. HQL 공부하기  (0) 2007.01.24
8.2.4. HQL 공부하기 - inner join  (0) 2007.01.24
8.2.3. HQL 공부하기 - order by절  (0) 2007.01.24
8.2.2. HQL 공부하기 - where절  (0) 2007.01.24
8.2.1. HQL 공부하기 - select절  (0) 2007.01.24
8.1. DbUnit 사용하기  (0) 2007.01.24
8. DAO 기능 구현하기  (4) 2007.01.23
7.3. 새로운 타입으로 맵핑하기.  (0) 2007.01.22
7.2. 기존 코드 수정하기.  (0) 2007.01.22
top

TAG ,



: 1 : ··· : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ··· : 29 :