天天看點

hibernate中DetachedCriteria查詢的用法

之前一般都是自己寫hql或sql來整,Criteria一般很少用,今天試了下~

DetachedCriteria從hibernate3開始支援,和以前的Criteria相比,DetachedCriteria的建立不需要session,是以在網上搜尋某篇文章就說可以把這個查詢條件的組合放在web層,然後事務,持久化在service層(需要hibernate的session)。正是因為DetachedCriteria建立不需要session,是以才這麼說,不過我一般還是不要這麼做。

來一段例子:

public List<UserOther> queryUserOtherList(UserOther uo,List<Integer> user_ids){

DetachedCriteria dc = DetachedCriteria.forClass(UserOther.class);

//查詢條件type

if(StringUtils.isNotEmpty(uo.getType())){

            dc.add(Restrictions.eq("type", uo.getType()));

       }

//查詢條件user_ids

  if(user_ids!=null){

   dc.add(Restrictions.in("user_id", user_ids));

  }

//--------------------2------------------這一段和上面的完全無關,用來試了一下conjunction------

  //dc.addOrder(Order.desc("type"));

  //dc.addOrder(Order.desc("puo_id"));

  //dc.add(Restrictions.eq("type", "0"));

  //dc.add(Restrictions.conjunction()

   // .add(Restrictions.eq("type", "1")

   // ).add(Restrictions.eq("type", "2"))

   // );

//---------------------3-----------------這一段和上面的完全無關,用來試了一下conjunction------

//--------------------------------------這一段和上面的完全無關,用來試了一下在标準查詢中寫sql------

 // dc.add(Restrictions.sqlRestriction("type = ? and user_id = ?",

  //  new Object[]{uo.getType(),uo.getUser_id()}, 

   // new Type[]{Hibernate.STRING,Hibernate.INTEGER}));

//--------------------------------------這一段和上面的完全無關,用來試了一下在标準查詢中寫sql------

List<UserOther> uoList = this.getHibernateTemplate().findByCriteria(dc);

return uoList;

}

上面的第2個标記處:主要用來試了下conjunction河disjunction,conjunction就是: (xx and xx and xx), disjunction就是  (xx or xx or  xx)

上面的第3個标記處:主要用來試了下在标準查詢中寫sql

另外還有多表關聯,但多表關聯必須要兩個rom對象之間做了1對1,1對多映射的才可以

另外還有什麼動态抓取啊,投影啊這些就沒試了,感覺寫起來科閱讀性比sql不爽了好多。

更多的參看這篇文章吧:http://blog.csdn.net/LC2586/archive/2010/04/01/5440659.aspx

============附錄==================
   比較運算符
   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