现在的位置: 首页 > 综合 > 正文

hibernate条件查询

2017年12月27日 ⁄ 综合 ⁄ 共 2195字 ⁄ 字号 评论关闭

---hibernate条件查询:
条件查询是更具面向对象特色的数据查询方式,核心类:Criteria、Criterion、Restrictions、Projections
-步骤:
1.用Hibernate创建出session
2.用session创建出criteria
3.用restrictions创建criteria查询条件
4.向criteria中添加查询条件
5.执行criteria的list(),uniqueResult()方法返回结果集。

-Projections投影运算的条件查询:相当于聚合、分组的操作
查询返回的结果集是数组,数组的前n个元素依次是投影运算的结果,最后一个元素才是条件查询的实体。
使用alias()为指定投影指定别名

-DetachedCriteria离线查询

//---Criteria:		
	List l = session.createCriteria(Student.class)//使用createCriteria开始条件查询		
		.add( Restrictions.gt("name" , "a"))	//根据Student的属性进行过滤数据
		.list();//执行查询	

	List l = session.createCriteria(Student.class)			
		.add( Restrictions.gt("studentNumber" , 20050231L))			
		.createCriteria("enrolments")//如果要增加对Student的关联类的属性的限制,则必须重新createCriteria()
		.add( Restrictions.gt("semester" , 2))
		.createAlias("enrolments", "en")
		.add( Restrictions.gt("en.semester" , 2))
		.list();	

	//--投影的条件查询Projections

		//使用createCriteria开始条件查询
		List l = session.createCriteria(Enrolment.class)
			.createAlias("student", "s")
			.setProjection(Projections.projectionList()				
				.add(Projections.rowCount())//统计记录条数				
				.add(Projections.max("s.name"))//统计选择该课程里最大的学生姓名			
				.add(Projections.groupProperty("course"))	//按course进行分组
			).list();


		//------指定别名-----
		List l = session.createCriteria(Enrolment.class)
			.setProjection(Projections.projectionList()			
			.add(Projections.groupProperty("course"))//按course进行分组			
			.add(Projections.alias(Projections.rowCount(), "c")))//统计记录条数,并为统计结果指定别名c
			.addOrder(Order.asc("c"))
			.list();
		

		List l = session.createCriteria(Enrolment.class)
			.setProjection(Projections.projectionList()
			//按course进行分组
			.add(Projections.groupProperty("course").as("c"))
			//统计记录条数,并为统计结果指定别名c
			.add(Projections.rowCount()))
			.addOrder(Order.asc("c"))
			.list();
	
	
		//------指定别名-----
		List l = session.createCriteria(Enrolment.class)
			.setProjection(Projections.projectionList()
			//按course进行分组,指定别名为c
			.add(Projections.groupProperty("course") , "c")
			//统计每组记录的条数,指定别名为rc
			.add(Projections.rowCount(), "rc"))
			.addOrder(Order.asc("rc"))
			.list();
		
		
		//使用Property只选出指定列
		List l = session.createCriteria(Student.class)
			.setProjection(Property.forName("name"))
			.list();
		
		
		//使用Property选出指定列,并根据指定列过滤数据
		List l = session.createCriteria(Enrolment.class)
			.createAlias("student", "s")
			.setProjection(Projections.projectionList()
			.add(Property.forName("course"))
			.add(Property.forName("s.name")))
			.add(Property.forName("s.name").eq("孙悟空"))
			.list();

抱歉!评论已关闭.