本文共 1709 字,大约阅读时间需要 5 分钟。
HQL查询过程中支持添加过滤器.使用步骤是这样的:
首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的<filter>过滤器;然后在对应的程序文件中使用enableFilter()方法启动过滤器,为过滤器定义的参数赋值,在执行时就会自动自行对应的过滤器
以上一节的Book和Category表为例:
1.定义过滤器,在Book.hbm.xml文件中添加:
2.使用过滤器,在Book.hbm.xml文件的class标签下添加:
在测试代码中启用过滤器:
@Test public void testHql10() { //过滤器的使用 为查询加上某些条件 /* * 1.定义过滤器 * 2.为过滤器添加条件 * 3.引用 过滤器 */ // 创建Query对象 Session session = HibernateUtil.getSession(); //启用过滤器 //这样的话不管干什么,都会在hql语句后面加上 where id=3 session.enableFilter("bookFilter").setParameter("id", 3); Listlist= (List)session.createQuery("from Book") .list(); for(Book b:list){ System.out.println(b); } session.close(); }
这里会查询id=3的那本书,并且打印出来.
这是一个Hql中使用过滤器查询的一个简单例子.这是使用xml文件配置的方法,这里介绍一下使用注解(Annotation)过滤查询的实现方法:
1.实体类Book:
//entity表示需要持久化的实体类@Entity//实体类多对应的表@Table(name="t_book")//定义过滤器@FilterDef(name="bookFilter",parameters={@ParamDef(name="id",type="integer")})@Filter(name="bookFilter",condition="id < :id")//在注解中,">","<"不需要转义public class Book { //id主键 @Id //设置主键生成策略,这里的auto表示自增长 与native对应 @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name; private double price; private String author; private Date pubDate;//get/set方法省略}
测试代码不需要改变,如果使用之上的测试代码将会打印:
Book [id=1, name=鹿鼎记, price=12.35, author=金庸, pubDate=2016-03-06 09:25:41.0, category=com.wang.pojo.Category@7347bcf4]
Book [id=2, name=斗破苍穹, price=22.35, author=土豆, pubDate=2016-03-06 09:25:41.0, category=com.wang.pojo.Category@1f10d4bf]
转载地址:http://wszdx.baihongyu.com/