閱讀721 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go 張誌宇 SERVELET JSP學習講義-我的第一個Servlet
  下一篇:go hibernate操作java.util.Date和java.sql.Date