我是靠谱客的博主 自然抽屉,最近开发中收集的这篇文章主要介绍MyBatis-延迟加载与MyBatis缓存(面试题)MyBatis-延迟加载与MyBatis缓存-概念性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

MyBatis-延迟加载与MyBatis缓存

  • MyBatis-延迟加载与MyBatis缓存-概念性
    • 延迟加载(面试题)
      • 1、什么是延迟加载(按需加载
      • 2、延迟加载
    • MyBatis缓存(面试题)
      • 1、Cache缓存
      • 2、MyBatis缓存分析
      • 3、一级缓存
      • 4、二级缓存
        • 原理
        • 开启二级缓存
      • 5、禁用二级缓存
      • 6、刷新二级缓存

延迟加载(面试题)

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() {
   
		

最后

以上就是自然抽屉为你收集整理的MyBatis-延迟加载与MyBatis缓存(面试题)MyBatis-延迟加载与MyBatis缓存-概念性的全部内容,希望文章能够帮你解决MyBatis-延迟加载与MyBatis缓存(面试题)MyBatis-延迟加载与MyBatis缓存-概念性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部