HQL多表查询
Mysql里面多表查询
1 内连接 查的是两个表关联的数据 2 左外连接 查的是左边表所有数据,右边表关联数据 3 右外连接 |
HQL实现多表查询
Hql多表查询 (1)内连接 (2)左外连接 (3)右外连接 (4)迫切内连接 (5)迫切左外连接 |
HQL内连接
1 内连接查询hql语句写法:以客户和联系人为例 (1)from Customer c inner join c.setLinkMan
返回list,list里面每部分是数组形式 2 演示迫切内连接 (1)迫切内连接和内连接底层实现一样的 (2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象 (3)hql语句写法 - from Customer c inner join fetch c.setLinkMan |
HQL左外连接
1 左外连接hql语句: (1)from Customer c left outer join c.setLinkMan (2)迫切左外连接from Customer c left outer join fetch c.setLinkMan 2 左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象
1 右外连接hql语句: (1)from Customer c right outer join c.setLinkMan |
Hibernate检索策略
检索策略的概念
1 hibernate检索策略分为两类: (1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
(2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库 2 延迟查询分成两类: (1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句 (2)关联级别延迟: - 查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟 |
关联级别延迟操作
1 在映射文件中进行配置实现 (1)根据客户得到所有的联系人,在客户映射文件中配置 2 在set标签上使用属性 (1)fetch:值select(默认) (2)lazy:值 - true:延迟(默认) - false:不延迟 - extra:极其延迟 true默认延时: get时发一条和用的时候发一条sql语句 False不延时: 执行get就发了两条sql语句 (1)调用get之后,发送两条sql语句
(2)极其懒惰,要什么值给什么值 |
批量抓取
1 查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人
(1)上面操作代码,发送了多条sql语句 2 在客户的映射文件中,set标签配置 (1)batch-size值,值越大发送语句越少 |