Hibernate Criteria的详细用法
来源:互联网 发布:卖家开通淘宝达人 编辑:程序博客网 时间:2024/06/05 07:12
创建Criteria
通过Hibernate Session创建:
Criteria criteria = session.createCriteria(Emp.class);
添加查询条件
criteria.add(Restrictions.eq("empId", empId));
criteria.list();
排序
criteria.addOrder(Order.asc("empId"));
统计
使用Projections的avg()、rowCount()、count()、max()、min()、 countDistinct()等方法,例如对查询结果的"age"作平均:
criteria.setProjection(Projections.avg("age"));
List users = criteria.list();
Iterator iterator = users.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
分组
criteria.setProjection(Projections.groupProperty("age"));
List users = criteria.list();
Iterator iterator = users.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
结合统计与分组功能projectionList.add(Projections.groupProperty("age"));
projectionList.add(Projections.rowCount());
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(projectionList);
List users = criteria.list();
Iterator iterator = users.iterator();
while(iterator.hasNext()) {
Object[] o = (Object[]) iterator.next();
System.out.println(o[0] + "\t" + o[1]);
}
如果有一个已知的物件,则可以根据这个物件作为查询的依据,看看是否有属性与之类似的物件,例如:
User user = new User();
user.setAge(new Integer(30));
Criteria criteria = session.createCriteria(User.class);
criteria.add(Example.create(user));
List users = criteria.list();
Iterator iterator = users.iterator();
System.out.println("id \t name/age");
while(iterator.hasNext()) {
User ur = (User) iterator.next();
System.out.println(ur.getId() +
" \t " + ur.getName() +
"/" + ur.getAge());
}
在这个例子中,user物件中有已知的属性"age"为30,使用Example会自动过滤掉user的空属性,并以之作为查询的依据,也就是找出 "age"同为30的资料。
Criteria可以进行复合查询,即在原有的查询基础上再进行查询,例如在Room对User的一对多关联中,在查询出所有的Room资料之后,希望再查询users中"age"为30的user资料:
Criteria roomCriteria = session.createCriteria(Room.class);
Criteria userCriteria = roomCriteria.createCriteria("users");
userCriteria.add(Restrictions.eq("age", new Integer(30)));
List rooms = roomCriteria.list(); // 只列出users属性中有user之"age"为30的Room
Iterator iterator = rooms.iterator();
hibernte criteria只查询表的的某个字段:
- Criteria criteria=session.createCriteria(User.class);
- ProjectionList proList = Projections.projectionList();//设置投影集合
- proList.add(Projections.Property( "userName "));
- proList.add(Projections.Property( "password "));
- criteria.setProjection(proList);
Criteria c = getSession().createCriteria(Infos.class);
c.add(Restrictions.in("infoType", infoType));
c.add(Restrictions.eq("infoStatus", 3));
c.setProjection(Projections.projectionList()
.add(Projections.groupProperty("infoType"))
.add(Projections.max("infoTime"),"infoTime"));
List<Object> l = c.list();
Object[] types=new Object[l.size()];
Timestamp[] times=new Timestamp[l.size()];
int i=0;
for(Object o:l){
Object[]obj=(Object[]) o;
types[i]=obj[0];
times[i]=(Timestamp) obj[1];
i++;
}
c=getSession().createCriteria(Infos.class);
c.add(Restrictions.in("infoType", types))
.add(Restrictions.in("infoTime",times));
List<Infos> list=c.list();
Criteria 使用关联查询
注意 :1` pubStationsV 是 PubTabTimeDate持久内中 关联对象名 , 不是 持久类名
2` projectionList 只能使用一次 多次没用
3` 别名是用很关键(pv) 否则 管理表中属性 找不到 会报错
Session session = pubTabTimeDateDao.getCurrentSession();
Criteria c = session.createCriteria(PubTabTimeDate.class,"p");
ProjectionList projectionList=Projections.projectionList();
projectionList.add(Projections.distinct(Projections.property("p.fstationnum")));
projectionList.add(Projections.property("pv.faddress"));
c.addOrder(Order.desc("p.fstationnum"))
.setFirstResult(0)
.setMaxResults(30);
Criteria cc = c.createCriteria("pubStationsV","pv");
c.setProjection(projectionList);
List list = cc.list();
- Hibernate Criteria的详细用法
- Hibernate的Criteria的用法
- Hibernate 的 Criteria的用法
- Hibernate 的 Criteria的用法
- Hibernate的Criteria的用法
- Hibernate 的 Criteria的用法
- Hibernate中Criteria的用法
- hibernate的Criteria Query 用法
- Hibernate中Criteria的用法
- 【hibernate】04-Criteria的用法
- hibernate-criteria的or()用法
- Hibernate的Criteria用法总结
- Hibernate Criteria的完整用法
- Hibernate中Criteria的用法
- hibernate中criteria的用法
- Hibernate中Criteria的用法
- hibernate中criteria的用法
- Hibernate中Criteria的用法
- mysql 慢日志分析工具pt-query-digest
- USB枚举过程
- KVM克隆及在不同物理机下的移植
- mac系统Sublime 2 乱码问题
- 数据库出现ORA-00283/ORA-01610的问题
- Hibernate Criteria的详细用法
- iOS中关于登录验证方面的问题的解决
- 实现平衡二叉树
- HDU 1004 Let the Balloon Rise (map使用)
- HDU ACM 2008 数值统计
- Linux中查看CPU信息
- 详解EBS接口开发之库存事务处理-物料批次导入
- leetcdoe 帕斯卡尔三角形2 Pascal's Triangle II
- Groovy 数据库应用开发实践-SQL对象托管和封装