Hibernate的Criteria查询示例

Criterai是一种完全面向对象的查询方法

package test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import util.HbnUtil;
import entity.Classes;

public class TestCriteria {
	@Test
	public void testCriteria(){
		Session s = HbnUtil.getSession();
		try {
			s.beginTransaction();
			//创建查询对象Criteria
			Criteria criteria = s.createCriteria(Classes.class);
			//创建查询条件Criterion
			Criterion c1 = Property.forName("className")
								   .like("%0901%");
			Criterion c2 = Restrictions.gt("total", 40);
			Criterion c3 = Restrictions.isNotNull("openDate");
			
			//设置查询条件c1,c2为或者的关系,之后再与c3 并且的关系
			criteria.add(Restrictions.and(Restrictions.or(c1, c2),c3));
			//查询结果按班级名称升序排列
			criteria.addOrder(Order.asc("className"));
			
			//执行查询
			List<Classes> classes = criteria.list();
			for (Classes c:classes){
				System.out.println("满足条件的班级:"+c.getClassName());
			}
			s.getTransaction().commit();
		} catch (HibernateException e) {
			s.getTransaction().rollback();
			e.printStackTrace();
		} finally{
			HbnUtil.closeSession(s);
		}
	}
	
	@Test
	public void testCriteriaProjection(){
		Session s = HbnUtil.getSession();
		try {
			s.beginTransaction();
			//创建查询对象Criteria
			Criteria criteria = s.createCriteria(Classes.class);
			criteria.setProjection(Projections.count("total"));
			
			Criterion c = Property.forName("className").like("%0901%");
			criteria.add(c);
			
			List<Integer> ret = criteria.list();
			for (Integer o:ret){
				System.out.println("满足条件的查询结果:"+o);
			}
			s.getTransaction().commit();
		} catch (HibernateException e) {
			s.getTransaction().rollback();
			e.printStackTrace();
		} finally{
			HbnUtil.closeSession(s);
		}
	}
	
	@Test
	public void testCriteriaProjectionList(){
		Session s = HbnUtil.getSession();
		try {
			s.beginTransaction();
			//创建查询对象Criteria
			Criteria criteria = s.createCriteria(Classes.class);
			
			ProjectionList pl = Projections.projectionList();
			pl.add(Projections.min("total"));
			pl.add(Projections.sum("total"));
			criteria.setProjection(pl);
			
			Criterion c = Property.forName("className").like("%0901%");
			criteria.add(c);
			
			Object[] ret = (Object[])criteria.uniqueResult();
			System.out.println("最少人数:"+ret[0]);
			System.out.println("所有人数:"+ret[1]);
			s.getTransaction().commit();
		} catch (HibernateException e) {
			s.getTransaction().rollback();
			e.printStackTrace();
		} finally{
			HbnUtil.closeSession(s);
		}
	}
}

你可能感兴趣的:(C++,c,Hibernate,C#,JUnit)