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);
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值