Criteria查询是Hibernate提供的另一种查询方式,与HQL基于字符串的查询形式完全不同。Hibernate提供了org.Hibernate.Criteria接口、org.hibernate.criterion.Criterion接口和org.hibernate.criterion .Restrictions类等Criteria API,用于支持在运行时动态生成查询语句。
1. 条件查询
使用Criteria查询包括以下步骤:
(1)使用Session接口的createCriteria()方法创建Criteria对象。
(2)使用Restrictions类提供的静态方法设置查询条件,这些静态方法返回Criterion对象,一个Criterion对象代表一个查询条件。Criteria接口的add()方法用来添加查询条件。
(3)使用Criteria接口的list()方法执行查询语句,list()方法返回java.util.List类型的结果,List集合中的每个元素都是持久化对象。
接下来通过示例来说明。
案例1 查询男学生package com.obtk.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;
public class CriteraTest1 {
public static void main(String[] args) {
Session session=null;
try {
session=HiberUtil.getSession();
Criteria cri=session.createCriteria(StudentEntity.class);
cri=cri.add(Restrictions.eq("gender", "男"));
List<StudentEntity> stuList=cri.list();
for(StudentEntity stu : stuList){
System.out.println(stu.getStuId()+"\t"+stu.getStuName()+"\t"+stu.getGender());
}
} catch (HibernateException e) {
e.printStackTrace();
}finally{
HiberUtil.closeSession();
}
}
}
案例2 多条件查询,链式编程
package com.obtk.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;
public class CriteraTest2 {
public static void main(String[] args) {
Session session=null;
try {
session=HiberUtil.getSession();
//添加条件,链式编程
Criteria cri=session.createCriteria(StudentEntity.class)
.add(Restrictions.eq("gender", "男"))
.add(Restrictions.ge("age", 20))
.add(Restrictions.le("age", 26))
.add(Restrictions.isNotNull("dept"));
List<StudentEntity> stuList=cri.list();
for(StudentEntity stu : stuList){
System.out.println(stu.getStuId()+"\t"+stu.getStuName()+"\t"+stu.getGender());
}
} catch (HibernateException e) {
e.printStackTrace();
}finally{
HiberUtil.closeSession();
}
}
}
package com.obtk.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;
public class CriteraTest3 {
public static void main(String[] args) {
Session session=null;
try {
session=HiberUtil.getSession();
//范围查询
//String[] theValues={"男","妖"};
//添加条件,链式编程
Criteria cri=session.createCriteria(StudentEntity.class)
//.add(Restrictions.in("gender", theValues));
.add(Restrictions.between("