Mybatis延迟加载

延迟加载概念:需要用到数据时才进行加载,不需要用到数据时就不加载数据,延迟加载也叫做懒加载。

优点:先从单表查询,需要用的时候再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

缺点:因为只有当需要用到数据时,才会进行数据库查询,在大批量数据查询时,因为查询工作也要耗费时间,所以造就用户用户等待时间较长,造成用户体验下降。

使用场景:

一对多,多对多:通常使用延迟加载。

一对一,多对一:通常使用立即加载。

注意:延迟加载是基于嵌套查询实现的

局部延迟加载



 

   

   

   

   

   




全局延迟加载

在Mybatis的核心配置文件总可以使用setting标签修改全局的加载策略



   

   


详细配置可参考官方文档的介绍:https://mybatis.org/mybatis-3/zh/configuration.html#settings

注意:局部的加载策略优先级高于全局的加载策略。

延迟加载原理:

使用CGLIB或Javassist(默认)创建目标对象的代理对象,当调用代理 对象的延迟加载属性的getting方法时,进入拦截器方法(invoke)。发现该方法需要延迟加载时,会单独发送事先保存好的查询关联对象的SQL,查询上来后调用set方法,为属性设置值,接着调用get方法,返回我们刚刚set的内容,这就是延迟加载的基本原理

延迟加载原理总结:

延迟加载主要是通过动态代理的形式实现,通过代理拦截到指定方法,执行数据加载。

你可能感兴趣的:(Mybatis延迟加载)