Hibernate API的使用

  1. 使用Configuration類
      org.hibernate.cfg.Configuration實例代表了JavaBean類型到sql數據庫表映射的完整集合,並且也包含了所有對hibernate屬性的設置信息。所以也可以把configuration理解爲程序員定義的hibernate.cfg.xml文件在內存中的表示。SessionFactory就是使用Configuration構建而成的。在程序中可以通過Configuration類去加載映射信息,以及設置屬性值,如:
      通過以下代碼就可以把映射文件model.hbm.xml交給Configuration獲取映射信息。
      
<mapping resource="model.hbm.xml">

  除了這種方式,還可以在創建Configuration的實例cfg時,通過addResource()方法爲其制定映射資源爲model.hbm.xml。
  

Configuration cfg=new Configuration().addResource("model.hbm.xml");

  此外,創建Configuration的實例時,可以通過addClass()方法將JavaBean類User、Product添加到cfg中,這樣Hibernate就會在ClassPath下的所有映射文件中尋找對User、Product類的映射信息,代碼如下:
  

Configuration cfg=new Configuration().addClass("com.examp.ShoppingOnline.User.class").addClass("com.examp.ShoppingOnline.Product.class");

  除了通過Configuration類加載映射信息,還可以通過調用其setProperty()方法爲Hibernate設置屬性,代碼如下:
  

Configuration cfg=new Configuration().setProperty("hibernate.dialect""org.hibernate.dialect.MySQLInnoDBDialect").setProperty("show_sql","");

  在上面的代碼中,把hibernate.dialect屬性的值設置爲org.hibernate.dialect.MySQLInnoDBDialect,並且把show_sql屬性的值設置爲true。
2. 使用SessionFactory接口
  當所有映射文件被Configuration解析並加載到內存之後,應用程序必須獲得一個用於構造session實例的工廠。這個工廠被應用程序的所有色色死你共享。
  

SessionFactory sessionFactory=cfg.buildSessionFactory();

  如果使用多個數據庫,Hibernate允許應用程序創建多個SessionFactory實例,每個數據庫創建一個SessionFactory實例,這樣很有利。
3. 使用Session接口
  一旦SessionFactory創建好,就可以用來緩存所有的數據庫連接,並且可以給程序員提供一個連接去操作數據庫。這是程序員需要做的就是使用SessionFactory實例創建一個session對象,然後就可以私用session對象進行操作。代碼如下:
  

Session session=sessions.openSession();

  獲取session對象後首先調用其beginTransaction()方法獲取一個Transaction對象tx;然後可以調用session的save()、update()、load()等方法處理JavaBean對象;在調用tx.comnmit()提交處理,如果發生異常,則調用tx.rollback()去回滾所有操作;最後用session.close()方法關閉該session。
4. 使用Transaction接口
  Transaction接口可以通過session對象獲取,它主要用來對操作數據庫的事務進行管理。一個事務是一個完整的操作單元,或者全部提交,或者全部回滾到提交前的狀態。在編程中一般調用其commit()和rollback()方法,它們分別用來提交所有操作和把所有的操作滾回到原來的狀態。
5. 使用Query接口
  (1)Query的使用方法
  

List users=session.createQuery("from User where username=:userName").setParameter("username",userName).list();

List products=session.createQuery("from Product order by saledate desc").setMaxResults(dispNUm).list();

  一個查詢通常在調用list()時才被執行,執行結果會被裝載進內存的一個集合(collection)中。查詢返回的對象處於持久態。如果程序員知道的查詢只會返回一個對象,可以使用list()的快捷方式uniqueResult().
  (2)迭代式獲取結果(Iterating results)
  

Iterator iter=sesson.createQuery("from Product order by saledate desc").iterate();
while(iter.hasNext()){
  Product product=(Product)iter.next();
  if(product.getPrice()>10){
  iter.remove();
  break;
  }
}

  從以上代碼可以看出,使用iterate()方法進行遍歷,這樣就可以在這個過程中進行一些判斷,根據判斷結果決定這個對象的操作,而這種方式在普通的查詢方法中是無法實施的。
  (3)綁定參數
  在進行查詢的過程中,,有些作爲查詢條件的常量,是其他變量的值,這時就可以使用Query提供的參數綁定的方法去將變量的值賦給查詢條件。代碼如下:
  

Query query=session.createQuery("from User where username=:userName");
query.setParameter("username",userName);
List list=query.list();

  從上述代碼可以看出在HQL語句中,先使用“:username”代表待定的條件參數,然後使用query.setParameter()方法把變量userName的值賦給它。也可以採用以下方式:
  

Query query=session.createQuery("from User where username=?");
query.setString(0,"Simith2");
List list=query.list();

  用“?”代表待定的條件常量,然後用setString()方法把字符串Simith2賦值給它。
  (4)分頁操作
  在web應用中,經常需要將查詢的結果分頁顯示出來,這就要求一次只能去除所有結果的一個子集,可以通過Query的setFirstResult()和setMaxResults()方法實現,代碼如下:
  

Query q=session.createQuery("from Product");
q.setFirstResult(20);
q.setMaxResults(10);
List procucts=q.list();

  以上的代碼取出第20-30條,一共十條記錄。
6. 使用Criteria接口
   Criteria接口是程序員可以動態的使用一種面對對象API創建查詢,而非在java代碼中嵌入字符串。代碼如下:
   

Criteria crit=session.createCriteria(Product.class);
crit.add(Expression.eq("price",12.0));
crit.setMaxResults(10);
List products=crit.list();

   以上代碼用來查詢價格爲12.0的所有商品,並且要求最多返回的商品數不超過10個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章