Posted on 2005-12-06 13:31
Kela 阅读(325)
评论(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();
}
}