查询过滤器指的是:配置好后,会在该对象上的每一条查询语句上自动加上查询条件:
如:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Student" table="t_student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="createTime"/>
<many-to-one name="classes" column="classid"/>
<filter name="idfilter" condition="id < :myid"/>
</class>
<query name="searchStudents"><![CDATA[
select s from Student s where s.id < ?
]]>
</query>
<filter-def name="idfilter">
<filter-param name="myid" type="integer"/>
</filter-def>
</hibernate-mapping>
package com.bjsxt.hibernate;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Session;
import junit.framework.TestCase;
/**
* 查询过滤器测试
* @author Administrator
*
*/
public class FilterQueryTest extends TestCase {
public void testQuery1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.enableFilter("idfilter")
.setParameter("myid", 10);
List students = session.createQuery("from Student")
.list();
for (Iterator iter = students.iterator();iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println(student.getName());
}
}catch(Exception e) {
e.printStackTrace();
}finally {
HibernateUtils.closeSession(session);
}
}
}
上述代码中只有from Student但执行的时候发出的语句是:
Hibernate: select student0_.id as id1_, student0_.name as name1_, student0_.createTime as createTime1_, student0_.classid as classid1_ from t_student student0_ where student0_.id < ?
过滤器在配置文件中的使用:
<filter name="idfilter" condition="id < :myid"/>
<filter-def name="idfilter">
<filter-param name="myid" type="integer"/>
</filter-def>