Criteria API 學習


詳細內容  http://blog.csdn.net/linshutao/article/details/5486628





 public void testCriteria() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   //使用Criteria API進行查詢
   Criteria crit = session.createCriteria(Student.class);
   //查詢名字不等於小桂的學生
  // crit.add(Restrictions.ne("name", "小桂"));
   
   //查詢名字爲校規的學生
  // crit.add(Restrictions.eq("name", "校規"));
   
   //查詢名字由余開頭的學生
  // crit.add(Restrictions.like("name", "餘%"));
   
   //查詢id<2的學生
  // crit.add(Restrictions.lt("id", new Integer(2)));
   
   //查詢id>2的學生
   //crit.add(Restrictions.gt("id", new Integer(2)));
   
   //查詢id>2並且(and)名稱以規結尾的學生,注意:添加多個限制時,解釋爲and關係
   //hibernate發錯的sql語句爲:
   //Hibernate: select this_.id as id1_0_, this_.name as name1_0_, this_.createTime 
   //as createTime1_0_, this_.classid as classid1_0_ from Student this_ where this_.id>? and this_.name like ?
  /*crit.add(Restrictions.gt("id", new Integer(2)));
   * crit.add(Restrictions.like("name", "%規"));
   * */ 
   
   //如果只是想滿足兩個條件中某一個條件(or),就需要使用Restrictions類上的or()方法,如下所示:
   //Criterion定義一個條件項
/*   Criterion id = Restrictions.gt("id", new Integer(2));
   Criterion name = Restrictions.like("name", "%規");
   LogicalExpression orExp = Restrictions.or(id, name);
   crit.add(orExp);*/
   
/*   如果要創建多於兩個的or表達式,則可以使用org.hibernate.criterion.Disjuncion對象來表示析取(disjunction)
   從Restrictions類上的disjunction()工廠方法獲得這個對象。
   要創建多於2個的AND表達式,可以使用conjunction()方法(合取)*/

   Criterion name = Restrictions.like("name", "%規");
   Criterion name1 = Restrictions.like("name", "%成");
   Criterion name2 = Restrictions.like("name", "餘%");
   Disjunction disjunction = Restrictions.disjunction();
   disjunction.add(name);
   disjunction.add(name1);
   disjunction.add(name2);
   crit.add(disjunction);
   List results = crit.list();
   Iterator iter = results.iterator();
   while(iter.hasNext()){
    Student s = (Student)iter.next();
    System.out.println(s.getName());
   }
   
   tx.commit();
  } catch (HibernateException e) {
   e.printStackTrace();
   if (tx != null)
    tx.rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testCriteria2() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   Criteria crit = session.createCriteria(Student.class);
   //創建一個別名
   Criteria classCriteria = crit.createAlias("classes", "c");
   crit.setProjection(Property.forName("name"));
   Criterion name = Restrictions.like("c.name", "714");
   crit.add(name);
   List results = crit.list();
   Iterator iter = results.iterator();
   while(iter.hasNext()){
    System.out.println(iter.next());
   }
/*   while(iter.hasNext()){
    Student s = (Student)iter.next();
    System.out.println(s.getName());
   }*/
   
   tx.commit();
  } catch (HibernateException e) {
   e.printStackTrace();
   if (tx != null)
    tx.rollback();
  } finally {
   HibernateUtils.closeSession(session);
  }
 }
}

發佈了20 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章