Hibernate的集中查詢方式 : hql查詢,QBC查詢和QBE查詢


轉載:http://blog.csdn.net/iijse/article/details/6161143

通常使用的Hibernate通常是三種:hql查詢,QBC查詢和QBE查詢:
1、QBE(Qurey By Example)檢索方式
QBE是最簡單的,但是功能也是最弱的,QBE的功能不是特別強大,僅在某些場合下有用。一個典型的使用場合就是在查詢窗口中讓用戶輸入一系列的 查詢條件,然后返回匹配的對象。QBE只支持=和like比較運算符,無法不大區間值,及其或的匹配。在這種情況下,還是采用HQL檢索方式或QBC檢索 方式。  

示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = null;
   3: Transaction ts = session.beginTransaction();
   4: try {
   5:     Query query = session.createQuery("from User as u where name='ijse'");
   6:     user= (User) query.list().get(0);
   7:     session.commit();
   8: } catch (HibernateException ex) {
   9:     ts.rollBack();
  10:     ex.printStackTrace();
  11: }
  12: System.out.println(user.getName());

QBC(Query By Criteria) 查詢方式

這種方式比較面向對象方式,重點是有三個描述條件的對象:Restrictions,Order,Projections。使用QBC查詢,一般需要以下三個步驟:

  1. 使用Session實例 的createCriteria()方法創建Criteria對象
  2. 使用工具類Restrictions的方法為Criteria對象設置查詢條件,Order工具類的方法設置排序方式,Projections工具類的方法進行統計和分組。
  3. 使用Criteria對象的list()方法進行查詢並返回結果

Restrictions類的常用方法:

方法名稱
描述
Restrictions.eq 等於
Restrictions.allEq 使用Map,Key/Valu進行多個等於的比對
Restrictions.gt 大於
Restrictions.ge 大於等於
Restrictions.lt 小於
Restrictions.le 小於等於
Restrictions.between 對應SQL的between
Restrictions.like 對應SQL的like
Restrictions.in 對應SQL的in
Restrictions.and and關系
Restrictions.or or關系
Restrictions.sqlRestriction SQL限定查詢

Order類的常用方法:

方法名稱
描述
Order.asc 升序
Order.desc 降序

Projections類的常用方法

方法名稱
描述
Projections.avg 求平均值
Projections.count 統計某屬性的數量
Projections.countDistinct 統計某屬性不同值的數量
Projections.groupProperty 指定某個屬性為分組屬性
Projections.max 求最大值
Projections.min 求最小值
Projections.projectionList 創建一個ProjectionList對象
Projections.rowCount 查詢結果集中的記錄條數
Projections.sum 求某屬性的合計
示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = null;
   3: Transaction ts = session.beginTransaction();
   4: try {
   5:     Criteria criteria = session.createCriteria(User.class);
   6:     criteria.add(Restrictions.eq("name","ijse"));
   7:     user= (User) criteria.list().get(0);    
   8:     session.commit();
   9: } catch (HibernateException ex) {
  10:     ts.rollBack();
  11:     ex.printStackTrace();
  12: }
  13: System.out.println(user.getName());

QBE(Query By Example)查詢方式

將一個對象的非空屬性作為查詢條件進行查詢。

示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = new User();
   3: user.setName("ijse");
   4: Transaction ts = session.beginTransaction();
   5: try {
   6:     Criteria criteria = session.createCriteria(User.class);
   7:     criteria.add(Example.create(user));
   8:     user= (User) criteria.list().get(0);    
   9:     session.commit();
  10: } catch (HibernateException ex) {
  11:     ts.rollBack();
  12:     ex.printStackTrace();
  13: }
  14: System.out.println(user.getName());

離線查詢

離線查詢就是建立一個DetachedCriteria對象,將查詢的條件等指定好,然后在session.beginTransaction()后將這個對象傳入。通常這個對象可以在表示層建立,然后傳入業務層進行查詢。

示例:
   1: DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
   2: detachedCriteria.add(Restrictions.eq("name","ijse");
   3:  
   4: Session session = SessionFactory.getCurrentSession();
   5: User user = new User();
   6: Transaction ts = session.beginTransaction();
   7: try {
   8:     Criteria criteria = detachedCriteria.getExecutableCriteria(session);
   9:     user= (User) criteria.list().get(0);    
  10:     session.commit();
  11: } catch (HibernateException ex) {
  12:     ts.rollBack();
  13:     ex.printStackTrace();
  14: }
  15: System.out.println(user.getName());

復合查詢

復合查詢就是在原有查詢的基礎上再進行查詢,可以調用Criteria對象的createCriteria()方法在這個Criteria對象的基礎上再進行查詢。

示例:
   1: Session session = SessionFactory.getCurrentSession();
   2: User user = new 
   3: User();
   4: Transaction ts = session.beginTransaction();
   5: try 
   6: {
   7:  Criteria criteria1 = 
   8: session.createCriteria(Room.class);
   9: Criteria 
  10: criteria2 =criterial1.createCriteria("User");
  11:  
  12: criteria2.add(Restrictions.eq("name",new String("ijse"));
  13:  
  14: user= (User) criteria.list().get(0); 
  15:  
  16: session.commit();
  17: } catch (HibernateException ex) {
  18:  
  19: ts.rollBack();
  20:  
  21: ex.printStackTrace();
  22: }
  23: System.out.println(user.getName());

分頁查詢

分頁查詢主要是要指定兩個參數:從第幾條數據開始,取多少條數據。可以通過調用Query或者Criteria對象的setFirstResult()和setMaxResults()方法分別進行設定。

示例:

   1: Session session = SessionFactory.getCurrentSession();
   2: List userList = null;
   3: Transaction ts = session.beginTransaction();
   4: try {
   5:     Criteria criteria = session.createCriteria(User.class);
   6:     criteria.setFirstResult(0);//從第一個數據開始
   7:     criteria.setMaxResults(10);//取10條記錄
   8:     userList = (List) criterial.list();   
   9:     session.commit();
  10: } catch (HibernateException ex) {
  11:     ts.rollBack();
  12:     ex.printStackTrace();
  13: }


免責聲明!

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



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