实例
运算符
HQL运算符
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 |
其他
1.sqlRestriction
Restrictions.sqlRestriction 用SQL限定查询
2.其他
Order.asc –> 根据传入的字段进行升序排序
Order.desc –> 根据传入的字段进行降序排序
MatchMode.EXACT –> 字符串精确匹配.相当于”like ‘value’”
MatchMode.ANYWHERE –> 字符串在中间匹配.相当于”like ‘%value%’”
MatchMode.START –> 字符串在最前面的位置.相当于”like ‘value%’”
MatchMode.END –> 字符串在最后面的位置.相当于”like ‘%value’”
例片段
1.between
List list = session.createCriteria(clazz)
.add(Restrictions.between("age",new Integer(20),new Integer(30)).list();
2.in
String[] names = {"AAA","BBB","CCC"};
List list = session.createCriteria(Student.class)
.add(Restrictions.in("name",names)).list();
3.isNull
List list = session.createCriteria(Student.class)
.add(Restrictions.isNull("age")).list();
4.or
List list = session.createCriteria(Student.class)
.add(Restrictions.or(Restrictions.eq("age",new Integer(20)),
Restrictions.isNull("age")).list();
5.QBC实现动态查询
public List findStudents(String name,int age){
Criteria criteria = session.createCriteria(Student.class);
if(name != null){
criteria.add(Restrictions.like("name",name,MatchMode.ANYWHERE));
}
if(age != 0){
criteria.add(Restrictions.eq("age",new Integer(age)));
}
criteria.addOrder(Order.asc("name"));//根据名字升序排列
return criteria.list();
}
6.嵌套or like
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;
7.disjunction
如果需要循环设置OR查询,可以用到disjunction,以下两段代码实现同样的功能。
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();