Hibernate检索方式:离线条件查询

投影查询:就是只查询某几个属性的时候
Hibernate检索方式:离线条件查询_第1张图片
如果是QBC的只想显示某几个属性,可以通过setProjection(),往list集合里添加属性。

Hibernate检索方式:离线条件查询_第2张图片


在HQL查询语句中可以调用聚合函数
count()
min()
max()
sum()
avg()

报表查询就是使用聚合函数
Hibernate检索方式:离线条件查询_第3张图片

Hibernate检索方式:离线条件查询_第4张图片
Hibernate检索方式:离线条件查询_第5张图片


查出来是30条记录


分组直接可以用group by进行分组统计,这和我们的SQL是一样的


在映射文件中使用命名方式查询

我们可以在Customer.hbm.xml中配置一个query标签,也可以使用sql-query标签。

如果是query标签,那就是HQL,我们给它取名叫findAll();
这个时候就有查询名称了

Hibernate检索方式:离线条件查询_第6张图片



Hibernate检索方式:离线条件查询_第7张图片



Hibernate检索方式:离线条件查询_第8张图片



这样就把客户的信息给打印出来


所以可以直接用命名的查询方式


离线的条件查询
  DetachedCriteria,criteria是叫条件查询,Detached叫脱管的或者离线的



struts2有一个高级查询:
  按姓名来查询的:
  也可以按性别查询:
  也可以按学历查询:
  也可以按电话查询:
  也可以按是否上传简历:
 
 
我只要一点查询就可以查里面的数据了
 
 
struts就是web层的框架,web层会调用业务层service层,service层才会调用dao层,session只有在dao层才有,这些数据是怎么从web层传到dao层,有的时候数据是不在你这个对象里的
 
 
 
 
是否上传简历,我们是有这种查询的,这个字段不在数据库里的,我们只能判断为不为空而已,isUpload(),我们要在web层接收这个数据,假如这几个对象都不在user里面,user里面都没有这几个字段,我们要在web层把数据通通都拿到,把数据都提交到web层来,我们当时是怎么传到service层的。
UserService us = new UserService();
//我们调用UserService里的findByCondition()
//传一个user,isUpload
us.findByCondition(user, isUpload);
但是isUpload没有封装上,没有在user里面,假如我们这些字段都没有在这里面,那就得一个个传进去
us.findByCondition(useName,sex,edu,,tel, isUpload);
但是这样查的话,假如我高级字段非常多,传起来特别麻烦,传统方式只能这样去调用了
 
 
现在我们就可以在web层获得一个对象,获得到DetachedCriteria,在web层获得一个离线的Criteria,Criteria得有session才可以创建它,session.createCriteria才会有它,现在在web层就可以拿到一个叫离线的,在web层将这个条件设置好,怎么去设置,就可以用criteria调用add(),
criteria.add(Restrictions,eq("name","zhangsan"));
criteria.add(Restrictions,eq("sex","man"));
criteria.add(Restrictions,eq("edu","...."));
 
 
现在就有一个离线的对象了
 
//直接new一个userService
   UserService userService = new UserService();
   //直接传一个criteria对象,传到service层
    us.findByCondition(criteria);
 
service层就有这个方法了,service层再来调用你的DAO层,DAO层里有session对象,session有了,它就拿到一个离线的criteria,session中获得一个可以执行的criteria对象,把离线的一传进来就可以执行了,离线的做条件查询,有一些数据你是没有办法封装的,那你直接就可以在web层把数据封装好,到时候直接查询dao层,
 

 
Hibernate检索方式:离线条件查询_第9张图片



Hibernate检索方式:离线条件查询_第10张图片



我们可以用离线查询来做高级查询的方式
 
Hibernate检索方式:离线条件查询_第11张图片


这些都是它提供的查询方式
 

如果是比较简单的查询就用HQL就可以了
 
 
 
如果条件非常繁琐就用QBC
 
Hibernate检索方式:离线条件查询_第12张图片

HQL和QBC都可以做带条件的查询
 
 
如果条件特别复杂就用QBC
 
 
如果操作特别简单的话就用HQL就可以了

你可能感兴趣的:(hibernate)