Hibernate Criteria查詢
阿新 • • 發佈:2018-12-09
private static void query() {
Session session=HibernateUtils.getSession();
//得到條件物件
Criteria criteria=session.createCriteria(Student.class);
/*//where條件中的拼接: age>25
criteria.add(Restrictions.ge("age", 25));
// sex='女'
criteria.add(Restrictions.eq("sex","女"));*/
//age>=25 and age<=26
//criteria.add(Restrictions.between("age", 25, 26));
/*//age>=25 and sex='女'
LogicalExpression logicalExpression=Restrictions.and(Restrictions.ge("age", 25), Restrictions.eq("sex", "女"));
criteria.add(logicalExpression);*/
//age>=25 or sex='女'
/*LogicalExpression logicalExpression=Restrictions.or(Restrictions.ge("age", 25), Restrictions.eq("sex", "女"));
criteria.add(logicalExpression);*/
//not sex='女'
//criteria.add(Restrictions.not(Restrictions.eq("sex", "女")));
//sex='女'
//criteria.add (Restrictions.sqlRestriction("sex=?", "女", StandardBasicTypes.STRING));
// age between 25 and 26 and sex='女'
criteria.add(Restrictions.sqlRestriction("age between ? and ? and sex=?", new Object[]{25,26,"女"}, new Type[]{StandardBasicTypes.INTEGER,StandardBasicTypes.INTEGER,StandardBasicTypes.STRING}));
List<Student> students=criteria.list();
System.out.println(students);
}
private static void query() {
Session session=HibernateUtils.getSession();
/*//得到條件物件
Criteria criteria=session.createCriteria(Student.class);
//指定班級延遲載入
//criteria.setFetchMode("classes", FetchMode.SELECT);
criteria.setFetchMode("classes", FetchMode.JOIN);
List<Student> students=criteria.list();
HibernateUtils.close(session);
for(Student stu:students){
System.out.println(stu);
System.out.println(stu.getClasses());
System.out.println("===========");
}*/
Criteria criteria=session.createCriteria(Classes.class);
//FetchMode.SELECT:指定載入方式為延遲載入
//FetchMode.JOIN:指定載入方式為立即載入
criteria.setFetchMode("students", FetchMode.JOIN);
List<Classes> classes=criteria.list();
//驗證延遲載入
//HibernateUtils.close(session);
for(Classes c:classes){
System.out.println(c);
System.out.println("學生:");
System.out.println(c.getStudents());
}
}
private static void query() {
Session session=HibernateUtils.getSession();
Criteria criteria=session.createCriteria(Student.class);
//指定升序排序
//criteria.addOrder(Order.asc("age"));
//指定降序排序
criteria.addOrder(Order.desc("age"));
//設定分析效果,發現和Query完全相同
criteria.setFirstResult(0);
criteria.setMaxResults(8);
List<Student> students=criteria.list();
System.out.println(students);
}
private static void query() {
Session session=HibernateUtils.getSession();
Criteria criteria=session.createCriteria(Student.class);
// age in(20,22)
criteria.add(Restrictions.in("age", new Object[]{20,22}));
/*//select name
//criteria.setProjection(Projections.property("name"));
criteria.setProjection(Property.forName("name"));
List<String> names=criteria.list();
System.out.println(names);*/
/*ProjectionList projectionList=Projections.projectionList();
//projectionList.add(Projections.property("name"));
projectionList.add(Property.forName("name"));
projectionList.add(Projections.property("age"));
//對指定的查詢列起別名
projectionList.add(Property.forName("email"), "郵箱");
//select name,age,email as '郵箱'.....
criteria.setProjection(projectionList);
List<Object[]> list=criteria.list();
for(Object[] objs:list){
System.out.println(Arrays.toString(objs));
}*/
/*//select count(*)
//criteria.setProjection(Projections.rowCount());
//select avg(age) from t_student where age in(20,22)
//criteria.setProjection(Projections.avg("age"));
//select count(id) from t_student where age in(20,22)
//criteria.setProjection(Projections.count("id"));
Object result=criteria.uniqueResult();
System.out.println("result="+result);*/
//select age count(id) from t_student where age in(20,22) group by age
//group by age
criteria.setProjection(Projections.projectionList()
.add(Projections.groupProperty("age")) //如果指定按某個欄位進行分組,則這個欄位會自動出現在select語句中
.add(Projections.count("id"))
);
List<Object[]> list=criteria.list();
for(Object[] objs:list){
System.out.println(Arrays.toString(objs));
}
}