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]

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM