Hibernate抓取策略(优化)

it2023-11-09  71

一,延迟加载:

延迟加载概述:

延迟加载:lazy(懒加载),执行到该行代码的时候,不会立即发送SQL语句进行查询。而是在真正使用这个对象的属性的时候才会发送SQL语句进行查询。

1.1延迟加载分类:

类级别的延迟加载、关联级别的延迟加载

类级别的延迟加载

指的是通过load方法查询某个对象的时候,是否采用延迟。session.load(Customer.class,1l);

类级别延迟加载方式

类级别的延迟加载通过标签的的lazy进行配置 (1)将lazy设置为false

(2) 将持久化类使用final修饰

(3) Hibernate. Initialize()

关联级别的延迟加载

指的是在查询都某个对象的时候,查询其关联的对象的时候是否采用延迟加载。 Customer customer = session.get(Customer.class, 1l); Set linkmans = customer.getLinkmans(); 一般关联级别的延迟加载取策略会和抓取策略一起使用,优化语句。

二、抓取策略

2.1抓取策略概述:

通用一个对象抓取到关联的对象需要发送SQL语句,SQL语句如何发送。发送成什么样格式的,通过策略进行配置。

(1)通过< set>或者< many-to-one>上的fetch属性进行设置。 (2)fetch和这些标签上的lazy如何设置优化发送的SQL语句。

2.2 < set>上的fetch和lazy

fetch抓取策略,控制SQL语句格式

select:默认值,发送普通的select语句,查询关联对象。

join:发送一条迫切左外连接查询关联对象。

subselect :发送一条子查询查询其关联对象。

lazy:延迟加载,控制查询关联对象的时候是否采用延迟

true:默认值,查询关联对象的时候,采用延迟加载。

false:查询关联对象的时候,不采用延迟加载

extra:及其懒惰。

(开发中一般都采用默认值,如果有特殊需求可能需要配置joi)

2.3< many-toone>上的fetch和lazy

fetch:抓取策略,控制SQL语句格式。

select:默认值,发送普通的select语句,查询关联对象。

join:发送一条迫切左外连接。

lazy:延迟加载,控制查询关联对象的时候是否采用延迟。

proxy:默认值,proxy具体的取值,取决于另一端的上的lazy的值。

false:查询关联对象,不采用延迟。

no-proxy:(不会使用)

(在实际开发中,一般都采用默认值。如果有特殊的需求,可能需要配置join。)

最新回复(0)