您的位置:首页 > 其它

hibernate学习笔记第四天(3)

2017-03-22 16:31 113 查看
此文章为自己书写,在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属性,值越大则效率越高

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息