mybatis延迟加载

Mybatis框架支持延迟加载。延迟加载仅支持在一对一(association关联对象)和一对多(collection关联集合对象)中,在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。

使用场景: 正常一条sql语句可以查出全部数据,但是有的数据有时候一时半会用不上,例如查询员工,捎带获取员工的部门数据,但是部门数据使用的频率很低,这种时候可以使用延迟查询,首先获取到所有的员工数据,然后在需要的时候再去获取部门数据。当需要使用数据的时候才去加载既是延迟加载。

实现原理:使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。

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