閱讀331 返回首頁    go 阿裏雲 go 技術社區[雲棲]


第十一章 Hibernate的查詢 Query by Criteria(QBC)

QBC(QueryByCriteria)查詢方式是Hibernate提供的“更加麵向對象”的一種檢索方式。QBC在條件查詢上比HQL查詢更為靈活,而且支持運行時動態生成查詢語句。 

1、Hibernate應用中使用QBC查詢通常經過3個步驟
 (1)
使用Session實例的createCriteria()方法創建Criteria對象
 (2)
使用工具類Restrictions的相關方法為Criteria對象設置查詢對象
 (3)
使用Criteria對象的list()方法執行查詢,返回查詢結果

2、一般的用法:
//查詢名字為zhangsan的用戶
			Criteria criteria = session.createCriteria(User.class);
			criteria.add(Restrictions.eq("username", "zhangsan"));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}


3、Restrictions用法

HibernateRestrictions的方法       說明 
Restrictions.eq                                    
= 
Restrictions.allEq                               
利用Map來進行多個等於的限製 
Restrictions.gt                                     
> 
Restrictions.ge                                    
>= 
Restrictions.lt                                      

Restrictions.le                                      
<= 
Restrictions.between                           BETWEEN
Restrictions.like                                   LIKE
Restrictions.in                                     in
Restrictions.and                                  and
Restrictions.or                                     or
Restrictions.sqlRestriction                 
SQL限定查詢 


查詢id大於100,小於200的用戶:

Criteria criteria = session.createCriteria(User.class);
			criteria.add(Restrictions.gt("id", 100)).add(Restrictions.lt("id", 200));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
		}



4、QBE (Query ByExample)

通過Example工具類,判斷Example.create(example)傳進來的example對象裏麵各個屬性是否與數據庫中配置。

//查詢名字為zhanglinlin的所有的用戶
			Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}


5、Order提供設置排序方式

Order.asc(StringpropertyName)
升序排序
Order.desc(StringpropertyName)
降序排


Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			//criteria.addOrder(Order.asc("id"));
			criteria.addOrder(Order.desc("id"));
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}


6、Projections提供對查詢結果進行統計與分組操作 

Porjections.avg(StringpropertyName)
求某屬性的平均值
Projections.count(StringpropertyName)
統計某屬性的數量
Projections.countDistinct(StringpropertyName)
統計某屬性的不同值的數量
Projections.groupProperty(StringpropertyName)
指定一組屬性值
Projections.max(StringpropertyName)
某屬性的最大值
Projections.min(StringpropertyName)
某屬性的最小值
Projections.projectionList()
創建一個新的projectionList對象
Projections.rowCount()
查詢結果集中記錄的條數
Projections.sum(StringpropertyName)
返回某屬性值的合計


//查詢有多少個人的名字為zhanglinlin的
			Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			criteria.setProjection(Projections.count("id"));
			Integer count = (Integer) criteria.uniqueResult();
		System.out.println(count);



7、QBC分頁查詢  

Criteria criteria = session.createCriteria(User.class);
			User example = new User();
			example.setUsername("zhanglinlin");
			criteria.add(Example.create(example));
			criteria.setFirstResult(0); //從哪一個記錄開始
			criteria.setMaxResults(5);//取多少條記錄
			List<User> users = criteria.list();
			for(User user : users){
				System.out.println(user.getId() + "--" + user.getUsername());
			}





最後更新:2017-04-03 18:52:12

  上一篇:go SQL Server判斷數據庫、表、存儲過程、函數是否存在
  下一篇:go OC語法學習小結