QBC查詢、離線條件查詢(DetachedCriteric)和分頁查詢模版


一、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) {
        //設置投影 ,給criteria添加投影條件
        criteria.setProjection(Projections.rowCount());  //select count(*) from cat;
        List<Long> findByCriteria = this.getHibernateTemplate().findByCriteria(criteria);
        if(findByCriteria.size()<=0){
            return null;
        }
            return findByCriteria.get(0);
        
    }

//分頁查詢 select * from cat

public List<Cat> findByCriteria(DetachedCriteria criteria,
            int firstResult, int maxResult) {
       List<Standard> list = this.getHibernateTemplate().findByCriteria(criteria, firstResult, maxResult);
        if(list.size()<=0){
            return null;
        }
       return list;
    }

 

 


免責聲明!

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



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