Kela's Blog

            前面的路很坎坷,但毕竟是条路.也许走过这一段就会发现,走过去就是梦想中的地方.因此坚持成为此刻唯一能做且必须去做的事情.
posts - 9, comments - 27, trackbacks - 0, articles - 15

kela的笔记 ORM产品 ---- hibernate(4)

Posted on 2005-12-06 13:31 Kela 阅读(326) 评论(0)  编辑  收藏 所属分类: 我的笔记(Hibernate)

使用Criteria Query 进行数据查询

Criteria Query 是一种通过对象化的查询,并将数据查询条件封装为一个对象。
简单来看,可以看作是传统SQL的对象化表示,如:
   criteria = session.createCriteria(KelaStudent.class);
   criteria.add(Expression.eq("stuName", "邓立强"));
这相当于SQL的 " select * from KELA_STUDENT where StuName = '邓立强' "
 
这种方式的特点是比价符合Java程序员的编码习惯,非常的容易上手。

更多的使用方法和参数,参考Hibernate文档和深入浅出Hibernate等资料。

示例一:StudentCriteriaQuery.java 一个基本 Criteria Query 的查询

/**
 * StudentCriteriaQueryl.java
 *
 * 基于 Criteria Query 的对象化查询
 */
package com.kela.hb.model;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;

import com.kela.hb.pojo.KelaStudent;
import com.kela.hb.util.HibernateUtil;

/**
 * @author kangfeng(kela.kf@gmail.com)
 *
 */
public class StudentCriteriaQuery {
 
  /*
   * 带有表达式的 Criteria 查询
   */
   public void exampleSelect_1() {
      Session session;
      Criteria criteria;
      try {
         session = HibernateUtil.currentSession();
         criteria = session.createCriteria(KelaStudent.class);
   
          //关于Expression提供的对应查询限定机制, 可在Hibernate的文档中获得详细资料
          //如果没有一下的查询条件则查询所有的数据库 KELA_STUDENT 的纪录
   
          //查询数据库表 KELA_STUDENT 中 StuName = '邓立强'的纪录,
          //查询条件中的stuName对应com.kela.hb.pojo.KelaStudent的属性stuName
          //criteria.add(Expression.eq("stuName", "邓立强"));
   
          //查询年龄大于25岁的学生纪录
          criteria.add(Expression.gt("stuAge", new Integer(25)));
  
           //如果同时出现几个限定条件,如 StuName = '邓立强'; stuAge > 25 则取交集
   
           KelaStudent kelaStudent = new KelaStudent();
   
           List list = criteria.list();
           Iterator it = list.iterator();
           while(it.hasNext()) {
                kelaStudent = (KelaStudent)it.next();
                System.out.print("  编号:" + kelaStudent.getStuID());
                System.out.print("  名称:" + kelaStudent.getStuName());
                System.out.print("  性别:" + kelaStudent.getStuSex());
                System.out.print("  年龄:" + kelaStudent.getStuAge());
                System.out.print("  地址:" + kelaStudent.getStuAddress());
                System.out.println();
           }
       } catch (HibernateException e) {
            System.out.println("[提示]: 查询没有成功," + e.getMessage());
       } finally {
            HibernateUtil.closeSession();
     }
  }
 
  /*
   * 示例查询,根据已有的对象,查询属性与之相符的其它对象
   */
  public List exampleSelect_2(KelaStudent kelaStudent) {
      Session session;
      Criteria criteria;
      try {
          session = HibernateUtil.currentSession();
          criteria = session.createCriteria(KelaStudent.class);
          criteria.add(Example.create(kelaStudent));
          return criteria.list();
      } catch (HibernateException he) {
         System.out.println("[提示]: 查询发生错误," + he.getMessage());
         return null;
      } finally {
         HibernateUtil.closeSession();
      }
  }
 
  /*
   * 调用示例查询,并打印结果
   * 这种查询并不常用,但是在组合查询中非常的有用途。
   * 比如要查询的条件有多个,但不能确定的时候,可以按照下面的例子使用,直接设定查询的条件,
   * 然 后将对象传入即可查询。
   */
   public void exampleSelect_3() {
      KelaStudent kelaStudent = new KelaStudent();
      //在这里可以设置多个条件,如年龄,地址等
      kelaStudent.setStuName("邓立强");
  
     List list = exampleSelect_2(kelaStudent);
     Iterator it = list.iterator();
     while(it.hasNext()) {
         kelaStudent = (KelaStudent)it.next();
         System.out.print("  编号:" + kelaStudent.getStuID());
         System.out.print("  名称:" + kelaStudent.getStuName());
         System.out.print("  性别:" + kelaStudent.getStuSex());
         System.out.print("  年龄:" + kelaStudent.getStuAge());
         System.out.print("  地址:" + kelaStudent.getStuAddress());
         System.out.println();
     }
  
   }
 
   public static void main(String[] args) {
          StudentCriteriaQuery scq = new StudentCriteriaQuery();
  
          //查询年龄大于25的学生纪录
          scq.exampleSelect_1();

          //按照给定的条件进行查询,这里为 name = '邓立强'
          //scq.exampleSelect_3();
   }  

}


只有注册用户登录后才能发表评论。


网站导航:
 
分享到: