---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();