hibernate学习笔记第四天(3)

来源:互联网 发布:java角色权限管理系统 编辑:程序博客网 时间:2024/05/21 17:43

此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。

HQL多表查询

mysql的多表查询

1.内连接
这里写图片描述
内连接查询的是两个表有关联的数据。
2.左外连接
这里写图片描述
代表查询的结果是左边的数据都存在,而右边的数据依据左边存在而显示。
3.右外连接
这里写图片描述
代表查询的结果是右边的数据都存在,而左边的数据依据右边存在而显示。

HQL实现多表查询

内连接
内连接查询hql语句写法:以客户与联系人为例
(1)from Customer c inner join c.linkmans
这里写图片描述
返回的是list,list的每部分都是数组的形式
左外连接
1左外连接的hql语句的写法
(1)from Customer c left outer join c.linkmans
这里写图片描述
右外连接
1右外连接的hql语句的写法
(1)from Customer c right outer join c.linkmans
这里写图片描述
迫切内连接
(1)迫切内连接和内连接底层实现是一样的
(2)区别:使用内连接返回的list中每部分是数组,迫切内连接返回的list的每部分都是对象的形式
(3)hql语句写法:
from Customer c inner join fetch c.linkmans
迫切左外连接
1迫切左外连接的hql语句的写法
(1)from Customer c left outer join fetch c.linkmans
这里写图片描述
2两者的联系与区别与内连接和迫切内连接相似

Hibernate检索策略

检索策略的概念
1.hibernate检索策略分为两类:
(1)立即检索(查询),根据id进行查询,调用get方法,一调用get方法就马上发送语句进行查询数据库
这里写图片描述
(2)延迟检索(查询),根据id进行查询,还有load方法,调用load方法不会马上去查询数据库,只有得到对象里边的除了id以外的值的时候才会发送语句查询数据库
这里写图片描述
2.延迟查询分成两类
(1)类级别的延迟:根据id查询返回实体类的对象,调用load方法不会马上发送语句
(2)关联级别的延迟:
查询出某个客户,再查询出这个客户的所有联系人,查询客户所有联系人的过程是否需要延迟,这个过程就称为关联级别的延迟
这里写图片描述
关联级别延迟操作
1.在映射文件中进行配置来实现
(1)根据客户得到相关所有的联系人,在客户映射文件中进行配置
2.在set标签上使用属性
(1)fetch:默认值select
(2)lazy:默认值true
true:延迟
false:不延迟
extra:极其延迟
这里写图片描述
这里写图片描述
执行get方法时也延迟查询,只发送了一条sql语句。
这里写图片描述
这里写图片描述
调用get方法之后发送了两条sql语句。
这里写图片描述
这里写图片描述
调用size方法时才只发送一条sql语句,而且只发送显示数量的语句。
批量查询
1.查询所有的客户,返回list集合,遍历list集合,得到每个客户,进而得到每个客户的所有联系人
这里写图片描述
(1)上面的操作代码,能实现功能,但是需要发送多条sql语句
2.在客户的映射文件中,set标签配置
(1)配置batch-size属性,值越大则效率越高
这里写图片描述

1 0