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或者大于值 |
- 例子
- 查询年龄在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();
- }
- -----------------------------------------------------------------------------------
- 今天用了写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;