> MyBatis通过动态代理(CGLIB)实现懒加载。它返回一个代理对象,当首次访问某个懒加载属性时,代理会拦截调用并触发一次新的数据库查询,实现按需加载,提升性能。 我们来详细剖析一下MyBatis是如何实现懒加载(Lazy Loading)的。 1. 什么是懒加载? 懒加载是一种设计模式,也称为“按需加载”。它的核心思想是:当真正需要数据的时候,才去执行数据库查询,而不是在加载主对象时就立即加载所有关联的对象。 举个例子: 查询一个用户()的信息时,这个用户可能关联了大量的订单()。 非懒加载:查询时,会立即执行一条复杂的语句,把该用户的所有信息也一并查出来,即使你当前的代码逻辑根本用不到这些订单信息。 懒加载:查询时,只执行查询表的基本SQL。对象中的订单列表()此时是一个“占位符”或者说“代理对象”。只有当你第一次调用方法时,MyBatis才会去数据库执行查询订单的SQL,并将结果填充到对象中。 懒加载的优点: 提升性能:避免了不必要的数据库查询,特别是对于一对多、多对多的关联关系,可以显著减少首次加载的开销。 节省内存:只有在需要时才加载关联数据,减少了内存占用。 -...