Hibernate框架使用面向对象检索策略,通过ORM将数据表字段映射到持久化类的属性,然后进行检索
查询方式包括:
Load查询优化
多端优化策略
立即查询
延迟查询
预先查询
批量查询
在Hibernate中有两种机制可以获取一个记录的信息 session.get() session.load()
差别是:
get是详情查询,会将记录的所有字段都取出
load是主键查询,只会取记录的主键信息,对其他字段的读取将在使用该字段时进行
立即检索
立即检索指的是在加载一个对象时不仅立刻加载该对象,而且还会立即加载与该对象相关联的其他对象
设置立即检索策略
将<class>元素和<set>元素内的lazy属性值设为false(默认值)
延迟检索
延迟检索指的是对象在使用到时才会进行加载,如果不需要则不会被加载
设置延迟检索策略
将<class>元素和<set>元素内的lazy属性值设为true
预先检索
预先检索指的是一种通过左外连接来获取对象关联实例或集合的检索方式
它主要适用于关联级别的查询
要使用预先检索策略需要在<set>元素内添加fetch属性
Fetch属性取值
Join:迫切左外连接查询
Select:采用普通的select查询
Subselect:采用嵌套子查询,其效果与select时相同,但是已经在hibernate5中弃用
批量检索
批量立即检索(lazy=false)
采用批量立即检索策略时,Hibernate会批量初始化要检索的实体类对象实例,从而减少SQL语句数目
用使用批量立即检索需要在<class>或<set>元素中添加batch-size属性
批量延迟检索(lazy=true)
批量延迟检索与批量立即检索的方式相同