hibernate的多條件查詢——Criteria Query的應用
查詢數據時,人們往往需要設置查詢條件。在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分頁的知識了,在這裏就不多贅述了。^ ^
參考地址:https://blog.csdn.net/dengqf/article/details/6603531
最後更新:2017-04-02 06:52:22
上一篇:
張誌宇 SERVELET JSP學習講義-我的第一個Servlet
下一篇:
hibernate操作java.util.Date和java.sql.Date
The 4 ethical issues in AI we're all thinking about
文本文件和二進製文件
撿到iPhone7怎麼解鎖?iPhone忘記鎖屏密碼怎麼辦
VMware vCenter Server Heartbeat 6.5安裝教程
通過擴展改善ASP.NET MVC的驗證機製[使用篇]
OSS發布swift sdk了~~
POJ 3468 線段樹 區間更新區間查詢
SQL數據類型和C#數據類型間的轉換
Jeesite增加spring-data-redis緩存功能以及相關配置
MongoDB的索引代碼實現--BtreeBasedAccessMethod