过滤器(filters):一种创新的方式来处理具有“显性(visibility)”规则的数据。
Hibernate filter是全局有效的、具有名字、可以带参数的过滤器, 对于某个特定的Hibernate session您可以选择是否启用(或禁用)某个过滤器
1、配置hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.project.pojo"> <!-- 定义过滤器 name是过滤器名称 全局唯一 --> <filter-def name="userFilter"> <!-- 过滤器可以携带参数 需要指定参数的名称和类型 --> <filter-param name="age" type="int"/> </filter-def> <class name="User" table="t_user"> <id name="id" column="id" type="int"> <generator class="native"></generator> </id> <property name="name" column="name" type="java.lang.String"></property> <property name="age" column="age" type="int"></property> <!-- 引用过滤器时指定名或条件 第一个age是列名称--> <filter name="userFilter" condition="age>:age"></filter> </class> <sql-query name="findUser"> select * from t_user; </sql-query> </hibernate-mapping>
2、代码测试
@Test public void testFilter(){ //设置filter session.enableFilter("userFilter").setParameter("age", 28); //查询 List<User> list = session.createQuery("from User").list(); for(User u : list){ System.out.println(u.getName()+"\t"+u.getAge()); } }