//Criteria接口{更擅长执行动态查询}
//步骤1.通过session创建Criteria,
//2.设定查询条件,通过Expression类或者Restrictions类创建查询条件
//3.调用和Criteria的list()方法执行查询语句
//作用:将查询条件封装成一个对象,Hibernate在执行时,会把Criteria指定的查询条件恢复成相应的SQL语句
/*List<User1> users=session.createCriteria(User1.class)
.add(Restrictions.eq("name", "4"))//调用add,添加查询条件
.list();
for(User1 u:users)
{
System.out.println(u.toString());
}*/
//1.add方法:
//.add(Restrictions.eq("name", "4")) 添加查询条件
//2.addOrder() 用来设置查询结果集的排序规则
/*List<User1> users=session.createCriteria(User1.class)
.add(Restrictions.eq("name", "4"))//条件 name=4
.addOrder(Order.desc("id"))//id 倒叙排列
.list();
for (User1 user:users)
{
System.out.println(user.toString());
}*/
//3.createCriteria()方法
//需要从多张表中联合查询时可使用。
/*List users=session.createCriteria(User.class)//第一张表
.add(Restrictions.eq("name", "1"))
.createCriteria("address")//第二张表
.add(Restrictions.eq("addressid",1))
.list();
for(int i=0;i<users.size();i++)
{
System.out.println(users.get(i).toString());
}*/
//4.list()方法,执行数据查询,并将擦汗寻结果返回
//5.scroll()方法 返回ScrollableResults数据
/*ScrollableResults users=session.createCriteria(User1.class)
.add(Restrictions.eq("name", "3"))
.scroll();
while(users.next())
{
System.out.println(users.get(0));
}*/
//6.setFetchModel()方法,用于设置抓取策略
//连接抓取策略
//查询抓取策略
//子查询抓取策略
//批量抓取策略
/*
List users=session.createCriteria(User.class)
.setFetchMode("permissions", FetchMode.JOIN)
.add(Restrictions.eq("name", "1")) //不仅查出User1实例,还查出关联的address实例
.list();
for(int i=0;i<users.size();i++)
{
System.out.println(users.get(i).toString());
}*/
// 7.setMaxResults()方法 从数据库中取得的记录的最大行数
// 8.setFirstResult()方法 所获取的第一个记录的位置
//分页查询功能
/*List users =session.createCriteria(User1.class)
.add(Restrictions.eq("name", "1"))
.setMaxResults(2)//支取2条记录
.setFirstResult(2)//从第三条记录开始取
.list();
for(int i=0;i<users.size();i++)
{
System.out.println(users.get(i).toString());
}*/
//9.setProjection()方法 主要完成一些聚合查询和分组查询
/*List result=session.createCriteria(User1.class).setProjection(Projections.projectionList()
.add(Projections.rowCount()) //统计记录行数
.add(Projections.avg("id")) //平均id
.add(Projections.max("id")) //最大id
.add(Projections.min("id")) //最小id
.add(Projections.groupProperty("name")) //按照名字分组查询{总共有14条数据,4中名字,所以分了四组}
).list();
for(int i=0;i<result.size();i++)
{
Object[] obj=(Object[]) result.get(i);
System.out.print("统计记录行数=="+obj[0]);
System.out.print("平均id=="+obj[1]);
System.out.print("最大id=="+obj[2]);
System.out.print("最小id=="+obj[3]);
System.out.print("最小id=="+obj[4]);
System.out.println();
}*/
//10 uniqueResult()方法, 使用该方法得到唯一的查询结果,使用该方法必须保证只有一个满足条件的结果
User1 user=(User1) session.createCriteria(User1.class)
.add(Restrictions.idEq(1))
.uniqueResult();
System.out.println(user.toString());
tx.commit();//提交事务
HibernateUntil.shutdown();//关闭session实例