Mybatis是否支持延迟加载?原理?

  • Mybatis支持延迟加载association关联对象和collection关联集合对象。其中,association关联指的是一对一查询,collection关联指的是一对多查询。在Mybatis的配置文件中,可以通过设置lazyLoadingEnabled属性来启用或禁用延迟加载,其取值可以为true或false。
  • 延迟加载的原理是通过使用CGLIB创建目标对象的代理对象。当调用目标方法时,会进入拦截器方法。例如,调用a.getB().getName()时,拦截器的invoke()方法会检查a.getB()是否为null。如果为null,拦截器会发送预先保存好的查询关联B对象的SQL语句,将B对象查询出来,并调用a.setB(b)将查询结果设置给a的B属性。然后,继续完成调用a.getB().getName()方法的执行。这样就实现了延迟加载的效果。
  • 值得注意的是,不仅仅是Mybatis,几乎所有支持延迟加载的框架,包括Hibernate在内,其延迟加载的原理都是类似的。

标签: java, Java面试题, mybatis, Java问题合集, Java编程, Java问题精选, Java常见问题, MyBatis面试题