Restrictions的用法

1、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();

3、使用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();
  }
 }

4、例子

今天用了寫hibernate高級查詢時用了Restrictions(當然Expression也是可以以的)這個類.感覺不錯.
下面的代碼寫的不易讀.其實核心就是一句

Restrictions.or(Restrictions.like(),Restrictions.or(Restrictions.like,…))
裏面的or可以無限加的.還是比較好用

Session session = getHibernateTemplate().getSessionFactory()
                .openSession();
        Criteria criteria = session.createCriteria(Film.class);
        List<Film> list = criteria.add(
            Restrictions.or(Restrictions.like("description", key,MatchMode.ANYWHERE),
            Restrictions.or(Restrictions.like("name", key,MatchMode.ANYWHERE),
                Restrictions.or(    Restrictions.like("direct", key,MatchMode.ANYWHERE),
                Restrictions.or(Restrictions.like("mainplay",key,MatchMode.ANYWHERE),
                        Restrictions.like("filearea", key,MatchMode.ANYWHERE)))))).list();

        session.close();
        return list;

轉載:https://www.cnblogs.com/hahajava/p/9445480.html            https://blog.csdn.net/qq_24531461/article/details/67634941
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章