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

本文介绍Hibernate Criteria API的基础用法及多条件查询技巧,通过具体示例讲解如何利用Criteria实现灵活的数据检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询数据时,人们往往需要设置查询条件。在SQL或HQL语句中,查询条件常常放在where子句中。此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中。这样,程序员可以不使用SQL甚至HQL的情况下进行数据查询。

先看一个简单的例子:

Criteriacr=session.createCriteria(Student.class);//生成一个Criteria对象
cr.add(Restrictions.eq("name","xy")); //等价于wherename=’xy’
Listlist=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.youkuaiyun.com/dengqf/article/details/6603531

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值