Restrictions用法


HQL運算符

QBC運算符

含義

=

Restrictions.eq()

等於equal

<> 

Restrictions.ne()

不等於not equal

> 

Restrictions.gt()

大於greater than

>=

Restrictions.ge()

大於等於greater than or equal

< 

Restrictions.lt()

小於less than

<=

Restrictions.le()

小於等於less than or equal

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()

等於列表中的某一個值

not in(列表)

Restrictions.not(Restrictions.in())

不等於列表中任意一個值

between x and y

Restrictions.between()

閉區間xy中的任意值

not between x and y

Restrictions.not(Restrictions..between())

小於值X或者大於值y

 

 
 

2,QBC常用限定方法

 

Restrictions.eq --> equal,等於.

Restrictions.allEq --> 參數為Map對象,使用key/value進行多個等於的比對,相當於多個Restrictions.eq的效果

Restrictions.gt --> great-than > 大於

Restrictions.ge --> great-equal >= 大於等於

Restrictions.lt --> less-than, < 小於

Restrictions.le --> less-equal <= 小於等於

Restrictions.between --> 對應SQL的between子句

Restrictions.like --> 對應SQL的LIKE子句

Restrictions.in --> 對應SQL的in子句

Restrictions.and --> and 關系

Restrictions.or --> or 關系

Restrictions.isNull --> 判斷屬性是否為空,為空則返回true

Restrictions.isNotNull --> 與isNull相反

Restrictions.sqlRestriction --> SQL限定的查詢

Order.asc --> 根據傳入的字段進行升序排序

Order.desc --> 根據傳入的字段進行降序排序

MatchMode.EXACT --> 字符串精確匹配.相當於"like 'value'"

MatchMode.ANYWHERE --> 字符串在中間匹配.相當於"like '%value%'"

MatchMode.START --> 字符串在最前面的位置.相當於"like 'value%'"

MatchMode.END --> 字符串在最后面的位置.相當於"like '%value'"

例子
查詢年齡在20-30歲之間的所有學生對象
List list = session.createCriteria(Student.class)
      .add(Restrictions.between("age",new Integer(20),new Integer(30)).list();
查詢學生姓名在AAA,BBB,CCC之間的學生對象
String[] names = {"AAA","BBB","CCC"};
List list = session.createCriteria(Student.class)
      .add(Restrictions.in("name",names)).list();
查詢年齡為空的學生對象
List list = session.createCriteria(Student.class)
      .add(Restrictions.isNull("age")).list();
查詢年齡等於20或者年齡為空的學生對象
List list = session.createCriteria(Student.class)
      .add(Restrictions.or(Restrictions.eq("age",new Integer(20)),
                 Restrictions.isNull("age")).list();

--------------------------------------------------------------------
使用QBC實現動態查詢 
public List findStudents(String name,int age){

 Criteria criteria = session.createCriteria(Student.class);
 if(name != null){
  criteria.add(Restrictions.liek("name",name,MatchMode.ANYWHERE));
 }
 if(age != 0){
  criteria.add(Restrictions.eq("age",new Integer(age)));
 }
 criteria.addOrder(Order.asc("name"));//根據名字升序排列
 return criteria.list();
}

 

 public List findByCriteria(Object[] args) {
        return HibernateSessionFactory
                .getSession()
                .createCriteria(Emp.class)
                // and
                .add(Restrictions.eq("id", 123))
                .add(Restrictions.gt("hriedate", "1985-4-1"))
                .add(Restrictions.ge("hriedate", "1985-4-1"))
                .add(Restrictions.lt("hriedate", "1985-4-1"))
                .add(Restrictions.le("hriedate", "1985-4-1"))
                // or
                .add(Restrictions.or(Restrictions.eq("id", 123),
                        Restrictions.gt("hriedate", "1985-4-1")))
                // 多個or
                .add(Restrictions.disjunction().add(Restrictions.eq("id", 123))
                        .add(Restrictions.gt("hriedate", "1985-4-1"))
                        .add(Restrictions.ge("hriedate", "1985-4-1")))
                // 各種條件
                .add(Restrictions.between("age", "19", "25"))
                // 張(STRAT是張在開頭(END是張在后頭)(ANYWHERE任何位置)(EXACT嚴格匹配))%
                .add(Restrictions.like("name", "zhang", MatchMode.START))
                .add(Restrictions.ilike("name", "zhang"))
                // 忽略大小寫
                .add(Restrictions.in("id", args))
                .add(Restrictions.isEmpty("emps"))
                // Dept.emps(針對集合) 沒有員工的部門
                .add(Restrictions.isNotEmpty("emps"))
                .add(Restrictions.not(Restrictions.isEmpty("emps")))// 給某些不帶一對的條件取反用的
                .add(Restrictions.isNull("sal"))// sal is null
                .add(Restrictions.isNotNull("sal"))// sal is not null
                .add(Restrictions.sizeEq("emps", 5))// 查詢部門人數等於 5個的
                .add(Restrictions.eq("id", 5)).add(Restrictions.ne("id", 5))// 不等於5
                .add(Restrictions.eqProperty("birthday", "hiredate"))// 兩個屬性相等,其他屬性也一樣F
                .list();

    }

    }

 


免責聲明!

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



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