Hibernate的三種查詢方式

Hibernate的三種查詢方式

1.HQL (Hibernate Query Lanuage) 語句,這是類似SQL語句的一種對象化查詢語句.

2.使用Criteria對象,進行按條件查詢(Query by Criteria,簡稱QBC)和按示例查詢(Query by Example 簡稱QBE).

3.生成原生的sql(Native SQL)語句.

Criteria的基本使用

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class);  
  3. List<Testbook> list=criteria.list();  
  4. tx.commit();  

 

 查詢Testbook 中所有的數據,然後返回

Criteria 接口的核心方法

 

add()      增加一個代表查詢條件的Criterion對象
addOrder()    增加一個代表排序的Criterion對象
createAlias()    創建關聯查詢,爲所關聯的持久化類建立別名
createCriteria()   在相互關聯的持久化類之間建立條件約束
setFirstResult()   設定要獲取的第一條記錄的位置
setMaxResults()    設定要獲取的記錄的最大數量
list()     獲取滿足查詢條件的記錄的集合
uniqueResult()    獲取滿足查詢條件的唯一記錄

 

對查詢結果進行排序

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class).add(  
  3. Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));  
  4. criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));  
  5. List<Testbook> list=criteria.list();  
  6. tx.commit();  

 

實現分頁顯示數據

Java代碼  收藏代碼
  1. <span style="font-size: x-small;">Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class).add(  
  3. Restrictions.like("name","任%"));  
  4. criteria.addOrder(Order.desc("id"));  
  5. criteria.setMaxResults(30);  
  6. criteria.setFirstResult(10);//setFirstResult()從0開始計數  
  7. List<Testbook> list=criteria.list();  
  8. tx.commit();</span>  

 

 

只查詢一條記錄

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria = session.createCriteria(Testbook.class).add(  
  3. Restrictions.like("name","任%"));  
  4. criteria.addOrder(Order.desc("id"));  
  5. criteria.setMaxResults(1);  
  6. Testbook tb=(Testbook)criteria.uniqueResult();  
  7. tx.commit();  

 

Restrictions類

<----------------------------------------------------------------------------------------------------------->

 

 


條件"或"方式組合查詢條件

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. Criterion criterion1=Restrictions.or(Restrictions.like("name","任%"),  
  4. Restrictions.between("id",1000,1010));  
  5. criteria.add(criterion1);  
  6. List<Testbook> list=criteria.list();  
  7. tx.commit();  

 

 

 

使用原生SQL語句設定查詢條件

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.add(Restrictions.sqlRestriction("{alias}.name=?","Narcissus",Hibernate.STRING));  
  4. List<Testbook> list=criteria.list();  
  5. tx.commit()  

 

 統計函數查詢

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Projections.max("price"));  
  4. Double maxValue=(Double)criteria.uniqueResult();  
  5. tx.commit();  
  6. System.out.println(maxValue);  

 

統計函數組合查詢條件

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Projections.max("price"));  
  4. Double maxValue=(Double)criteria.uniqueResult();  
  5. tx.commit();  
  6. System.out.println(maxValue);  

 

 

獲取多個統計函數的值

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. ProjectionList proList=Projections.projectionList();  
  4. proList.add(Projections.max("price"));  
  5. proList.add(Projections.min("price"));  
  6. proList.add(Projections.avg("price"));  
  7. proList.add(Projections.sum("price"));  
  8. proList.add(Projections.count("price"));  
  9. proList.add(Projections.countDistinct("price"));  
  10. proList.add(Projections.rowCount());  
  11. criteria.setProjection(proList);  
  12. Object values[]=(Object[])criteria.uniqueResult();  
  13. tx.commit();  

 

 

 

 分組查詢

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Projections.groupProperty("price"));  
  4. List<Double> list=criteria.list();  
  5. tx.commit();  

 

 分組統計

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. ProjectionList proList=Projections.projectionList();  
  4. proList.add(Projections.rowCount());//商品的個數  
  5. proList.add(Projections.sum("price"));  
  6. proList.add(Projections.groupProperty("name"));  
  7. criteria.setProjection(proList);  
  8. List<Double> list=criteria.list();  
  9. tx.commit();  

 

 

 

投影查詢
在一個表中有很多個字段,投影查詢只是查詢某一個或多個字段,也稱局部查詢

 

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. criteria.setProjection(Property.forName("price"));  
  4. criteria.add(Restrictions.gt("price",new Double(40.0)))  
  5. List<Double> list=criteria.list();  
  6. tx.commit();  

 

使用Property類的forName()方法實現分組統計

 

Java代碼  收藏代碼
  1. Transaction tx = session.beginTransaction();  
  2. Criteria criteria=session.createCriteria(Testbook.class);  
  3. ProjectionList proList=Projections.projectionList();  
  4. proList.add(Projections.forName("price").max());  
  5. proList.add(Projections.forName("price").min());  
  6. proList.add(Projections.forName("price").avg());  
  7. proList.add(Projections.forName("category.id").group().as("c"));  
  8. criteria.setProjection(proList);  
  9. criteria.addOrder(Order.desc("c"));  
  10. List<Object[]> list=criteria.list();  
  11. tx.commit();  

 

使用DetachedCriteria對象實現離線查詢

Java代碼  收藏代碼
  1. //在表現層,構造DetachedCriteria對象,保存用戶動態的查詢條件  
  2. DetachedCriteria detchedCriteria=DetachedCriteria.forClass(Testbook.class);  
  3. detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",new Integer(1),new Integer(10)));  
  4. detchedCriteria.addOrder(Order.desc("id"));  
  5.   
  6. //在業務邏輯層,DetachedCriteria對象與當前的Session對象進行綁定,獲取查詢結果  
  7. Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();  
  8. Transaction tx=detchedCriteria.getExecutableCriteria(session);  
  9. List<Testbook> list=criteria.list();  
  10. tx.commit();  

 

根據示例對象進行查詢

 

 

先定義一個模板然後把這個模板的樣式傳進去,查詢,例如這裏定義的Testbook中的名字爲Narcissus的字段,進行查詢,條件可以爲一個也可以爲多個,對應的就是where中的條件

 

Java代碼  收藏代碼
  1. Testbook tb=new Testbook();  
  2. tb.setName("Narcissus");  
  3. Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();  
  4. Transaction tx = session.beginTransaction();  
  5. Criteria criteria=session.createCriteria(Testbook.class);  
  6. Criteria.add(Example.creaate(tb));  
  7. List<Testbook> list=criteria.list();  
  8. tx.commit();  

 

轉載自:http://fehly.iteye.com/blog/642110

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