您的位置:首页 > 其它

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

2016-12-27 13:43 260 查看
投影查询:就是只查询某几个属性的时候





如果是QBC的只想显示某几个属性,可以通过setProjection(),往list集合里添加属性。





在HQL查询语句中可以调用聚合函数

count()

min()

max()

sum()

avg()

报表查询就是使用聚合函数












查出来是30条记录

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

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

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

如果是query标签,那就是HQL,我们给它取名叫findAll();

这个时候就有查询名称了













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

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

离线的条件查询

  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层,

 

 









我们可以用离线查询来做高级查询的方式

 





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

 

如果是比较简单的查询就用HQL就可以了

 

 

 

如果条件非常繁琐就用QBC

 





HQL和QBC都可以做带条件的查询

 

 

如果条件特别复杂就用QBC

 

 

如果操作特别简单的话就用HQL就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: