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());


}

1 thought on “8.2.2. HQL 공부하기 – where절”

Leave a Reply

Your email address will not be published. Required fields are marked *