Hibernate关联查询

gojava 2021-09-05 原文


Hibernate关联查询

  本文由广州疯狂软件java培训分享:

  很多人认为hibernate一旦涉及到多张表查询就很不方便,只能通过原声sql解决,其实不然,hql语句其实已经比较强大了,基本涵盖了sql的60%的功能。我认为用原生sql的场景应该为以下几点情况:

  1. 非常复杂sql(嵌套、临时表、混合语句【update包含select嵌套】)

  2. 某数据库(如oracle)特性函数

  3. 特殊业务sql,即查询出的结果是某种特殊业务含义,并不是po实体类里的字段。例如:select col_1 as business1 , col_2 as business2 from table;(business1并不是table的字段)

  除以上特殊需求外,我建议能用hq就用hql,hql最大的优点,除了能自动映射成po实体类,另一个就是跨数据库的通用性,采用hql语句可以轻松将数据库由mysql改为oracle。

  hql的基础我就不再叙述了,今天我为大家主要介绍多表之间的关联查询。

  1. po之间含有关联关系

  [java] view plaincopy public class Student {

  …

  private Clazz clazz;

  get()…

  set()…

  }

  from Student t inner join t.clazz r where t.sex = \’男\’ and r.name = \’三班\’

  这个语句默认情况下,是懒加载的,如果想一并抓取,则语句为:

  from Student t inner join fetch t.clazz r where t.sex = \’男\’ and r.name = \’三班\’

  hql同样支持left join和right join等关联查询

  2. po之间没有关联关系

  [java] view plaincopy public class Student {

  …

  private String clazzId;

  get()…

  set()…

  }

  select t from Studnent t, Clazz r where t.clazzId = r.id and t.sex = \’男\’ and r.name = \’三班\’

  3. 查询部分字段

  另外有时我们只需要查询po对象里的部分字段,那么怎么查呢?

  select new Student(name, sex) from Student

  但需要注意的是,Student实体类中必须要有参数为name,sex的构造函数。

  4. 统计函数

  支持count()、min()、max()、sum()、avg()等

  select avg(s.age) from Student as s

  5. 去除重复行

  select distinct s.age from Student as s

  6. 综合用法

  举一个典型的例子:分页。用hibernate分页,现在大多数人还是采用两步去做,第一步统计行数,第二步分页查询(目的是计算出总页数),如果想一步完成,多数人还是用sql了,其实hql也能做到。

  select new Student(t.name, t.sex, count(t)) from Sudent t

  在Student实体类中只要有参数为name, sex, rowCount的构造函数即可,rowCount也可以不是数据库里的字段

  通过以上可以看出,某一技术我们有时觉得不方便,只是我们还不够了解它,需要我们更多的仔细去探索和挖掘。

  疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼。

发表于
2014-03-15 15:05 
百易城 
阅读(415
评论(0
编辑 
收藏 
举报

 

版权声明:本文为gojava原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gojava/p/3602036.html

Hibernate关联查询的更多相关文章

随机推荐

  1. 『嗨威说』算法设计与分析 – 分治法思想小结与引申

    本文索引目录: 一、分治算法的基本思想 二、一道二分题点拨分治思想 三、结对编程小结     一、分治算法的基 […]...

  2. 力软快速开发框架的建设与介绍

              大家都知道现在大规模金融信息系统的业务复杂性高,同时对系统的性能、可用性、可靠性和安全性都 […]...

  3. BigDecimal

    一、 计算机的小数计算一定范围内精确,超过范围只能取近似值: 计算机存储的浮点数受存储bit位数影响,只能保证 […]...

  4. HBase最佳实践 – 集群规划

    本文由  网易云 发布。   作者:范欣欣 本篇文章仅限本站分享,如需转载,请联系网易获取授权。     HB […]...

  5. 使用 vscode将本地项目上传到github以及删除github上的某个文件夹

    安装Git后,可以看到windows环境下有两个命令输入窗口Git CMD 和Git Bash Git GUI […]...

  6. Animations and transitions

      在交互式可视化中,有一个词叫reactive,指的是以可视化的方式来响应用户的行为,帮助用户进行可视化并理 […]...

  7. Android WorkManager工作约束,延迟与查询工作

    WorkManager工作约束,延迟与查询工作 本文可能会混用“工作”与“任务”这两个词。 本文例子使用Kot […]...

  8. 解读 IoC 框架 InversifyJS

    原文链接 InversityJS 是一个 IoC 框架。IoC(Inversion of Control) 包 […]...

展开目录

目录导航