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. 单例模式

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个 […]...

  2. Visual Studio Code搭建python开发环境

    python安装(Mac下自带) Visual Studio Code 安装 Visual Studio Co […]...

  3. vue中使用mixins

    Mixins (混合或混入)——定义的是一个对象 1.概念:一种分发Vue组件可复用功能的非常灵活的方式。混入 […]...

  4. XAML常用控件2

    这节继续讲一些xaml中的常用控件。 布局控件 除了我们之前讲过的Grid,StackPanel,Border […]...

  5. SpringCloud(三)Ribbon与Feign

    上一篇使用了Eureka与Ribbon组件做了最简单的的服务注册与发现,我们知道Eureka是实现服务治理中心 […]...

  6. 在H5页面内通过地址调起高德地图实现导航 – 洛卡卡了

    在H5页面内通过地址调起高德地图实现导航 在H5页面内通过地址调起高德地图实现导航 项目中用到的一个功能是要通 […]...

  7. ASP.NET Web API编程——模型验证与绑定

     1.模型验证 使用特性约束模型属性 可以使用System.ComponentModel.DataAnnota […]...

  8. windows10商店应用离线安装方法

    1.当你遇到window10自带微软商店下载应用死活下载不来时可以使用文中办法离线下载解决 2.首先知道你需下 […]...

展开目录

目录导航