为什么需要延迟加载?
因为会提高效率嘛,存在即合理,哈哈.一般设置延迟加载就是在对象关系映射上(在多的一方).如下图:
一个用户有多个消费纪录。
设置成lazy后,查询数据的时候只会取出消费记录(多的一方),不会查询用户(这不就提高效率了吗,也就是关联数据不会查询数据库),但是另一个问题又来了,我要查询数据库的时候把关联的数据查询出来怎么办?如下图:
需要查询的时候将关联的数据再查询一次.
百度上是这么写的:
如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中.(一次都查询出来所有数据)
如果是LAZY,那么取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)。
科普一下:
1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。 2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。 3、比方User类有两个属性,name跟address,就像百度知道,登录后用户名是需要显示出来的,此属性用到的几率极大,要马上到数据库查,用急加载;而用户地址大多数情况下不需要显示出来,只有在查看用户资料是才需要显示,需要用了才查数据库,用懒加载就好了。所以,并不是一登录就把用户的所有资料都加载到对象中,于是有了这两种加载模式。
总结:有关系对象映射的时候,需要设置延迟加载(多的一方).可以提高效率.
时间: 2024-10-12 06:49:10