查询数据时,人们往往需要设置查询条件。在SQL或HQL语句中,查询条件常常放在where子句中。此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中。这样,程序员可以不使用SQL甚至HQL的情况下进行数据查询。
先看一个简单的例子:
Criteria cr = session.createCriteria(Student.class); //生成一个Criteria对象
cr.add(Restrictions.eq("name", "xy"));
//等价于where name=’xy’
List list = cr.list();
我们来看运算符这样一个对比。
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 |
Criteria什么时候威力最大呢?就是多条件查询的时候。
视图是这样:
学号<input type="text" name="dto.num" />
姓名<input type="text" name="dto.name" />
<input type="submit" value="查询" />
我们可以这样做:
Entity层
public class Student
{
private int id;
private String name;
private Date birth;
...........
}
DTO层
public class StudentDto
{
private int id; // 学生编号
private String name;// 学生姓名
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
Impl层
public PageModel getQqueryResult(StudentDto dto, int start, int pagesize)
{
Criteria c = this.getSession().createCriteria(Student.class);
if (0 != dto.getId())
{
c.add(Restrictions.like("id", dto.getId()));
}
if (null != dto.getName() && !"".equals(dto.getName()))
{
c.add(Restrictions.like("xm", "%" + dto.getName() + "%"));
}
int count = c.list().size();
List datas = c.setFirstResult(start).setMaxResults(pagesize).list();
int totalPage = helper.totalPage(count, pagesize);
// 得到结果集
PageModel pm = new PageModel();
pm.setTotal(count);
pm.setDatas(datas);
pm.setTotalPage(totalPage);
return pm;
}
.......下面就涉及到Struts和SSH分页的知识了,在这里就不多赘述了。^ ^