一、QBC檢索步驟
QBC檢索步驟:
1.調用Session的createCriteria()方法創建一個Criteria對象。
2.設定查詢條件。Expression類提供了一系列用於設定查詢條件的靜態方法,
這些靜態方法都返回Criterion實例,每個Criterion實例代表一個查詢條件。
Criteria的add()方法用於加入查詢條件。
3.調用Criteria的list()方法執行查詢語句。該方法返回List類型的查詢結果,在
List集合中存放了符合查詢條件的持久化對象。
-
比較運算符
- HQL運算符 QBC運算符 含義
- = Restrictions.eq() 等於
- <> Restrictions.not(Exprission.eq()) 不等於
- > Restrictions.gt() 大於
- >= Restrictions.ge() 大於等於
- < Restrictions.lt() 小於
- <= Restrictions.le() 小於等於
- is null Restrictions.isnull() 等於空值
- is not null Restrictions.isNotNull() 非空值
- like Restrictions.like() 字符串模式匹配
- and Restrictions.and() 邏輯與
- and Restrictions.conjunction() 邏輯與
- or Restrictions.or() 邏輯或
- or Restrictions.disjunction() 邏輯或
- not Restrictions.not() 邏輯非
- in(列表) Restrictions.in() 等於列表中的某一個值
- ont in(列表) Restrictions.not(Restrictions.in())不等於列表中任意一個值
- between x and y Restrictions.between() 閉區間xy中的任意值
- not between x and y Restrictions.not(Restrictions..between()) 小於值X或者大於值y
離線(detached)查詢和子查詢
DetachedCriteria類使你在一個session范圍之外創建一個查詢,並且可以使用任意的 Session來執行它。
DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
.add( Property.forName("sex").eq('F') );
Session session = ....;
Transaction txn = session.beginTransaction();
List results = query.getExecutableCriteria(session).setMaxResults(100).list();
txn.commit();
session.close();
DetachedCriteria也可以用以表示子查詢。條件實例包含子查詢可以通過 Subqueries或者Property獲得。
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight").avg() );
session.createCriteria(Cat.class)
.add( Property.forName("weight).gt(avgWeight) )
.list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight") );
session.createCriteria(Cat.class)
.add( Subqueries.geAll("weight", weights) )
.list();
*************************************************\
1. 創建一個Criteria 實例
org.hibernate.Criteria接口表示特定持久類的一個查詢。Session是 Criteria實例的工廠。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2. 限制結果集內容
一個單獨的查詢條件是org.hibernate.criterion.Criterion 接口的一個實例。
org.hibernate.criterion.Restrictions類 定義了獲得某些內置Criterion類型的工廠方法。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") ) 相當於=》select * from car where name like 'Fritz%'
.add( Restrictions.between("weight", minWeight, maxWeight) )
.list();
約束可以按邏輯分組。
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
Restrictions.eq( "age", new Integer(0) ),
Restrictions.isNull("age")
) )
.list();
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
.add( Restrictions.disjunction()
.add( Restrictions.isNull("age") )
.add( Restrictions.eq("age", new Integer(0) ) )
.add( Restrictions.eq("age", new Integer(1) ) )
.add( Restrictions.eq("age", new Integer(2) ) )
) )
.list();
************************************************
可以使用注入sessionFactory,繼承HibernateDaoSupport,獲得hibernate模版進行相關操作
二、以分頁查詢為例
| 業務層 DetachedCriteric criteria=DetachedCriteric.forclass(Cat.class); //=>select *from cat; 添加條件約束 criteria.add(Restirctions.eq("flag","0")); //select *from cat where flag='0'; 1、查詢總記錄數 Long total= findCoundByDetachedCriteria(criteria); 2、查詢相關信息 List<Cat> catinfo = findByCriteria(criteria); 持久層 (可作為持久層的模版一直使用) 查詢總記錄數 public Long findCoundByDetachedCriteria(DetachedCriteria criteria) { //分頁查詢 select * from cat public List<Cat> findByCriteria(DetachedCriteria criteria, |
