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();
我们来看运算符这样一个对比。
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
先看一个简单的例子:
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 |
视图是这样:
学号<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
相关文章推荐
- Hibernate条件查询(Criteria Query)
- [转]Hibernate条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- hibernate参考手册之---条件查询(Criteria Query)
- Hibernate动态条件查询(Criteria Query)
- 【转】Hibernate动态条件查询(Criteria Query)
- Hibernate动态条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- NHibernate之旅(4):探索查询之条件查询(Criteria Query)
- (详细)Hibernate查询技术(Query、Session、Criteria),Hibernate的三种状态,Hibernate集合struts2实现登录功能(二)
- NHibernate条件查询(Criteria Query)
- Hibernate 中 Criteria 查询条件 Restrictions 限定条件参数详解
- Criteria Query—Hibernate之面向对象查询
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- JAVA Hibernate 条件查询 Criteria
- Hibernate条件查询(DetachedCriteria)
- [转]NHibernate之旅(4):探索查询之条件查询(Criteria Query)
- 应用Hibernate3的DetachedCriteria实现分页查询