1、HQL查询详解
hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,
区别:普通sql操作数据库表和字段,hql操作实体类和属性
查询所有: from 实体类名称
条件查询: from 实体类名称 where 属性名称=?
模糊查询
排序查询: from 实体类名称 order by 实体类属性名称 asc/desc
分页查询:hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作
投影查询:查询不是所有字段值,而是部分字段的值
聚合函数查询
内连接
setLinkMan 是当前类中另外一个对象的属性名
返回list,list里面每部分是数组形式
迫切内连接
(1)迫切内连接和内连接底层实现一样的
(2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象
from Customer c inner join fetch c.setLinkMan
左外连接
左外连接 from Customer c left outer join c.setLinkMan
迫切左外连接 from Customer c left outer join fetch c.setLinkMan
左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象
右外连接
from Customer c right outer join c.setLinkMan
2、QBC查询详解
1 使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现
2 使用qbc时候,操作实体类和属性
3 使用qbc,使用Criteria对象实现
查询所有
条件查询
模糊查询
排序查询
分页查询
统计查询
离线查询
3、Hibernate检索策略
立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
延迟查询:调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库
延迟查询分类:
(1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
(2)关联级别延迟:查询一个类中外键表的集合时
关联级别延迟操作
在set标签上使用属性
(1)fetch:值select(默认)
(2)lazy:值
true:延迟(默认)
false:不延迟
extra:极其延迟
极其延迟,需要什么值就查什么值,其他值一概不要。
批量抓取
场景:查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人
batch-size值,值越大发送语句越少