Hibernate之HQL添加过滤器查询的用法

简介:   HQL查询过程中支持添加过滤器.使用步骤是这样的:   首先在要查询的实体对象的映射中使用标签配置过滤器,并在相对应的标签中添加对应的过滤器;然后在对应的程序文件中使用enableFilter()方法启动过滤器,为过滤器定义的参数赋值,在执行时就会自动自行对应的过滤器 以上一节的Book和Category表为例:   1.

  HQL查询过程中支持添加过滤器.使用步骤是这样的:

  首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的<filter>过滤器;然后在对应的程序文件中使用enableFilter()方法启动过滤器,为过滤器定义的参数赋值,在执行时就会自动自行对应的过滤器

以上一节的Book和Category表为例:

  1.定义过滤器,在Book.hbm.xml文件中添加:

<!-- 定义过滤器 -->
    <filter-def name="bookFilter">
        <filter-param name="id" type="integer"/>
    </filter-def>

 

2.使用过滤器,在Book.hbm.xml文件的class标签下添加:

<!--如果希望id大于或小于某个值 condition标签中应当写"id &lt; :id"(id小于某个值)或"id &gt; :id"(id大于某个值)-->
<filter name="bookFilter" condition="id=:id"></filter>

在测试代码中启用过滤器:

@Test
    public void testHql10() {
        //过滤器的使用 为查询加上某些条件
        /*
         * 1.定义过滤器
         * 2.为过滤器添加条件
         * 3.引用 过滤器
         */
        // 创建Query对象 
        Session session = HibernateUtil.getSession();
        //启用过滤器
        //这样的话不管干什么,都会在hql语句后面加上 where id=3
        session.enableFilter("bookFilter").setParameter("id", 3);
        List<Book> list= (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]

 

  

相关文章
|
6月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
|
3月前
|
SQL 数据库 Java
HQL vs SQL:谁将统治数据库查询的未来?揭秘Hibernate的神秘力量!
【8月更文挑战第31天】Hibernate查询语言(HQL)是一种面向对象的查询语言,它模仿了SQL的语法,但操作对象为持久化类及其属性,而非数据库表和列。HQL具有类型安全、易于维护等优点,支持面向对象的高级特性,内置大量函数,可灵活处理查询结果。下面通过示例对比HQL与SQL,展示HQL在实际应用中的优势。例如,HQL查询“从员工表中筛选年龄大于30岁的员工”只需简单地表示为 `FROM Employee e WHERE e.age &gt; 30`,而在SQL中则需明确指定表名和列名。此外,HQL在处理关联查询时也更为直观易懂。然而,对于某些复杂的数据库操作,SQL仍有其独特优势。
57 0
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
103 0
|
3月前
|
SQL Java 数据库连接
|
3月前
|
缓存 Java 数据库连接
什么是 Hibernate 查询语言或 HQL?
【8月更文挑战第21天】
108 0
|
3月前
|
SQL Java 数据库连接
在 Hibernate 中何时使用条件查询?
【8月更文挑战第21天】
39 0
|
3月前
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
35 0
|
3月前
|
SQL 安全 Java
|
5月前
|
SQL Java 数据库连接
技术经验分享:Hibernate之HQL
技术经验分享:Hibernate之HQL
28 0
|
6月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)