HQL (六) 查询过滤器

查询过滤器
设置了查询过滤器,并在程序中打开了过滤器,则在同一个session中,将在所有的查询语句后面都会加上预定好的查询条件,


* 在映射文件中定义过滤器的参数
* 在类的映射文件中使用过滤器参数

映射文件student.hbm.xml
<hibernate-mapping>
<class name="com.wlh.hibernate.Student" table="t_student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="createTime"/>
<many-to-one name="classes" column="classesid"/>
[color=red] <!--设定过滤器的条件为id小于10-->
<filter name="filtertest" condition="id < :myid"></filter>[/color]
</class>
<!--外置命名查询,查询语句-->
<query name="studentQuery">
<![CDATA[
select s from Student s
]]>
</query>


[color=red]<!--声明过滤器,并设定一个形参myid,类型为initeger-->
<filter-def name="filtertest">
<filter-param name="myid" type="integer"/>
</filter-def>[/color]

</hibernate-mapping>
* 在程序中启用过滤器
参见:FilterQueryTest.java


package com.wlh.hibernate;

import java.util.Iterator;
import java.util.List;

import junit.framework.TestCase;

import org.hibernate.Session;

public class FilterQueryTest extends TestCase{

public void testQuery1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//启用并且给过滤器参数myid赋值为10
session.enableFilter("filtertest")
.setParameter("myid", 10);
List students=session.getNamedQuery("studentQuery")

.list();
for(Iterator iter=students.iterator();iter.hasNext();){
Student o=(Student)iter.next();
System.out.println("name="+o.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值