6.4.12:命名HQL查询

来源:互联网 发布:开机windows无法加载 编辑:程序博客网 时间:2024/05/29 08:39

HQL查询还支持将查询所用的HQL语句放入配置文件中,而不是代码中。通过这种方式,可以大大提高程序的解耦。

在Hibernate映射文件的<hibernate-mapping.../>元素中使用<query.../>子元素来定义命名查询,使用<query.../>元素只需要指定一个name属性,指定该命名查询的名字。该元素的内容就是命名查询的HQL语句。下面是定义命名查询的配置文件片段:

<query name="myNamedQuery">    from Person as p where p.age>?</query>
Session里提供了一个getNamedQuery(String name)方法,该方法用于创建一个Query对象,一旦获得了Query对象,剩下的操作与普通的HQL查询完全一样。

Transaction txt=session.beginTransaction();System.out.println("===执行命名查询===");List list=session.getNamedQuery("myNamedQuery").setInteger(0,20).list();for(Iterator it=list.iterator();it.hasNext();){Person p=(Person) it.next();System.out.println(p.getName());}txt.commit();
可以看出,使用命名查询与普通查询的效果基本相似,只是将原来的createQuery(String hql)方法换成了getNamedQuery(String name),剩下的事情几乎完全一样。实际上,命名查询的作用仅仅是将HQL语句从Java代码中提取出来,放到映射文件中配置而已。当应用需要修改查询语句时,开发者无须打开Java代码进行修改,直接修改配置文件中的查询语句即可。

原创粉丝点击