HQL优化
避免or操作
where
子句包含or
操作,执行时不使用索引
from
House where
street_id
=
'1000' or
street_id
=
'1001'
可以使用in条件来替换
from
House where
street_id
in
('1001','1000')
避免使用not
where
子句包含not
关键字,执行时该字段的索引失效
from
House as h where
not (h.price
>1800)
使用比较运算符替换not
from
House as h where
h.price
<=
1800
避免like的特殊形式
查询时,尽可能少使用like
避免having子句
尽可能在where
子句中指定条件
避免使用distinct
在不要求或允许冗余时,应避免使用distinct
Hibernate数据检索策略
Hibernate提供多种数据检索策略,常用的有:
立即检索
延迟检索
不同检索策略的作用域及默认检索策略
作用域 可选的检索策略
默认的检索策略 运行时行为受影响的检索方法
类级别 立即检索/延迟检索 延迟检索 仅影响Session的load()方法
关联级别 立即检索/延迟检索 延迟检索 影响Session的load()和get()
检索策略的运行机制
类型
立即检索
类级别
立即加载检索方法指定的对象
关联级别
立即加载与检索方法指定的对象关联的对象,可以设定批量检索数量
优点
对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象缺点
(1)select语句数目多
(2)可能会加载应用程序不需要访问的对象,造成内存空间的浪费
---------------------------
类型
延迟检索
类级别
延迟加载检索方法指定的对象
关联级别
延迟加载与检索方法指定的对象关联的对象,可以设定批量检索数量
优点
由应用程序决定需要加载那些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。提高检索性能,节省内存空间
缺点
应用程序如果希望访问游离状态的代理类实例,必须保证它在持久化状态时已经被初始化
设定检索策略的常用属性
属性
lazy
类级别
1.<class>元素中lazy属性的可选值为:true(延迟检索)和false(立即检索)
2.
<class>元素中lazy属性的默认值为true
一对多关联级别
1.<set>元素中lazy属性的可选值为:true(延迟检索)、false(立即检索)和extra(增强延迟检索)
2.
<set>元素中lazy属性的默认值为true
多对一关联级别
1.<many-to-one>元素中的lazy属性的可选值为:proxy(延迟检索)、no-proxy(无代理延迟检索)和false(立即检索)
2.<many-to-one>元素中的lazy属性的默认值为true
--------------------------------------------
属性
fetch
类级别
没有此属性
一对多关联级别
1.<set>元素中fetch属性的可选值为:select(查询语句)、subselect(子查询语句)和join(迫切左外连接检索)
2.
<set>元素的fetch属性的默认值为select
多对一关联级别
1.<many-to-one>元素中fetch属性的可选值为:select(查询语句)和join(迫切左外连接检索)
2.<many-to-one>元素的fetch属性的默认值为select
HQL 联接查询
内联接:inner
join
最典型、最常用的联接查询
两个表存在主外键关系时通常会使用内联接查询
外联接
左外联接:left
join 或
left
outer join
右外联接:right
join 或right
outer join
完整外联接:full
join或
full
outer join
联接类型
HQL语法
内联接
inner
join 或
join
迫切内联接 inner
join fetch或
join
fetch
左外联接 left
outer join或
left
join
迫切左外联接 left
outer join fetch或
left
join
fetch
右外联接
right
outer join 或
right
join
适用范围
适用于有关联关系的持久化类,并且在映射文件中对这种关联关系中作了映射
Hibernate联接语法如下
from
Entity inner
join [fetch]
Entity.property
from
Entity left
join [fetch]
Entity.property
from
Entity right
join [fetch]
Entity.property