您的位置:首页 > 产品设计 > UI/UE

hibernate的多条件查询——Criteria Query的应用

2012-01-14 13:56 489 查看
查询数据时,人们往往需要设置查询条件。在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分页的知识了,在这里就不多赘述了。^ ^







参考地址:http://blog.csdn.net/dengqf/article/details/6603531
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: