MyBatis-延迟加载与MyBatis缓存(面试题)

MyBatis-延迟加载与MyBatis缓存-概念性

延迟加载(面试题)

1、什么是延迟加载(按需加载

 resultMap中的association(has a)和collection(has some)标签具有延迟加载的功能。
 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

  • 设置延迟加载(配置问题使用代码演示)
    Mybatis默认是没开启延迟加载功能的,我们需要手动开启。
  • 需要在mybatis-config.xml文件中,在标签中开启延迟加载功能。
    lazyLoadingEnabled、aggressiveLazyLoading
    在这里插入图片描述
     在最新官方MyBatis文档里,有上面这2个属性,一个是延迟加载,一个是分层加载。
    lazyLoadingEnabled 默认值为false,那么在有级联关系的resultMap里,查询后会加载出所有的级联关系,当然有时候我们并不需要这些所有的时候,我们就可以应用到延迟加载给我们带来的好处了。
    aggressiveLazyLoading默认值是true,这里我称之为分层加载,大概意思是如果它为true,那么当我使用了延迟加载,要么所有级联都不加载,要么如果我加载一个,其他都得加载.
    aggressiveLazyLoading值是false 那么就是按需加载,如果是true表示只要使用一个级联对象,就全部加载!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 全部配置
    在这里插入图片描述
  • 局部配置
     fetchType是可以注明在association 和 collection里的,选值为eager和lazy,就是为了方便我们结合aggressiveLazyLoading(false)来配合使用的,让延迟加载发挥到极致,即只加载我需要的!
    在这里插入图片描述
    如果全局和局部同时生效,那么就近原则,局部生效!

2、延迟加载

在这里插入图片描述
以下是resultMap对应的POJO

  • Student:
public class Student {
   

	private Integer id;
	private String studentName;
	private String studentAge;

	private List studentHealthCards;
	private ParentOfStudent parentOfStudent;

	public Integer getId() {
   
		return id;
	}

	public void setId(Integer id) {
   
		this.id = id;
	}

	public String getStudentName() {
   
		return studentName;
	}

	public void setStudentName(String studentName) {
   
		this.studentName = studentName;
	}

	public String getStudentAge() {
   
		return studentAge;
	}

	public void setStudentAge(String studentAge) {
   
		this.studentAge = studentAge;
	}

	public List getStudentHealthCards() {
   
		return studentHealthCards;
	}

	public void setStudentHealthCards(List studentHealthCards) {
   
		this.studentHealthCards = studentHealthCards;
	}

	public ParentOfStudent getParentOfStudent() {
   
		return parentOfStudent;
	}

	public void setParentOfStudent(ParentOfStudent parentOfStudent) {
   
		this.parentOfStudent = parentOfStudent;
	}

	@Override
	public String toString() {
   
		return "Student [id=" + id + ", studentName=" + studentName + ", studentAge=" + studentAge + "]";
	}

<
  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值