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


      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]

     

      

  • 相关阅读:
    三、python语法(定义,赋值,注释,输入输出)
    二、Python安装
    一、python简介
    Java第十二天
    Java第十一天
    Java第十天
    Java第九天
    Java第八天
    Java第七天
    Java第六天
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5253170.html
Copyright © 2020-2023  润新知