第十一章 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用法
Hibernate中Restrictions的方法 說明
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);
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