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楼。
转载于:https://www.cnblogs.com/gojava/p/3602036.html
Hibernate关联查询相关推荐
- SSH学习-Hibernate关联查询
与MyBatis类似,Hibernate也有关联查询,数据库中表与表之间的关联关系使用主外键的形式体现,实体对象之间的关联关系体现在对象与对象的引用.在Mybatis中,当涉及到复杂查询并且表之间存在 ...
- hibernate hql 关联查询_Hibernate【关联查询篇】
1. Hibernate 关联查询 1.1. 说明 Hibernate框架支持通过配置映射关系实现多表关联查询. 1.2. 类型 关联查询分为:一对一(one-to-one).一对多(one-to-m ...
- Hibernate实现对多个表进行关联查询
Hibernate实现对多个表进行关联查询? String sTest = "from tBookInfo book, BookSelection sel where book.id = s ...
- [转] hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询
不同数据库 自增长ID配置 正对不同的数据库可以同时使用 @Id @GeneratedValue(strategy = GenerationType.AUTO) 2 针 ...
- java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除
hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...
- hibernate mysql id 自增长 注解_hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询...
不同数据库 自增长ID配置 正对不同的数据库可以同时使用 @Id @GeneratedValue(strategy = GenerationType.AUTO) 2 针对mysql @Id @Gene ...
- SpringBoot24 SpringDataJPA环境搭建、实体类注解、关联查询
1 版本说明 JDK:1.8 MAVEN:3.5 SpringBoot:2.0.4 IDEA:旗舰版207.2 MySQL:5.5 2 SpringDataJPA环境搭建(SpringBoot版本) ...
- Hibernate【查询、连接池、逆向工程】
2019独角兽企业重金招聘Python工程师标准>>> 前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主 ...
- Hibernate hql 查询指定字段并获取结果集
Hibernate hql 查询指定字段并获取结果集 在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况: 1.查询全部字 ...
最新文章
- java泛型函数 返回值_java 泛型(类)方法返回值为什么是 Object??
- java引用 弱引用_了解Java弱引用
- php在html里面的位置,关于script在html中的摆放位置解析
- C#使用HTML文件中的file文件上传,用C#代码接收上传文件
- php编写计算程序,PHP编写的小应用——计算器
- pytorch nn.LogSoftmax
- Linux学习总结(74)——wget 命令详解
- Django信号量实现用户密码修改
- mysql 开发进阶篇系列 23 应用层优化与查询缓存
- 嵌入式操作系统和普通操作系统的区别_嵌入式ARM和单片机的区别何在
- Clion调试STM单片机
- 在现有Fabric 2.2.0 网络上设置和运行Caliper性能测试 实战
- echart 三维可视化地图_可视化地图是什么?推荐3个工具!
- 第十四届蓝桥杯模拟赛c++ 试题 I
- Java入门之~Java基础语法
- 为什么重大疾病保险最好要选择保障终身?
- 感量越大抑制频率约低_开关电源电磁兼容进级-EMI传导输入滤波器的设计理论(ED-TEST上海)...
- cocos 设置canvas透明导致 正常节点透明度设置效果异常
- 汇编语言个人笔记(三)mov和add指令及确定物理地址的方法
- 白皮书:OpenStack与容器的相遇相知(下)
热门文章
- Cracking The Coding Interview5.2
- 【转】几点 iOS 开发技巧
- linux kernel 2.6.36 编译升级
- stone/reverse/string/digit(完美消除)
- [hive学习翻译]Hive - Introduction
- 小型软件项目开发流程探讨
- 设计模式复习-模板方法模式
- C语言经典例8-输出乘法口诀表
- 【Android Gradle 插件】ProductFlavor 配置 ( multiDexEnabled 配置 | multiDexKeepFile | multiDexKeepProguard )
- 【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | ART 虚拟机下 DexClassLoader 类加载器脱壳点总结 )