Mybatis常见问题

news2024/11/23 13:42:29

Mybatis执行流程

  • 理解各组件的联系
  • Sql的执行过程(参数映射,sql解析,执行和处理结果)
  • 首先通过mybatis-config.xml文件去加载连接数据库的相关配置,加载sql的映射文件
    在这里插入图片描述
    在这里插入图片描述
  • 通过mybatis的配置文件然后去构建会话工厂SqlSessionFactory(会话工厂,全局一个,用于生产sqlSession)
  • 紧接着进行创建会话SqlSession项目和数据库的会话,包含了执行sql语句的所有方法,每次操作一次会话,有多个。
  • 然后进入Executor执行器,真正执行数据库操作接口,也负责查询缓存的维护
  • 最后进入MappedStatement对象来读取标签中的信息
    在这里插入图片描述
    标签中的id resultMap对象 以及参数等等都会通过MappedStatement对象来读取的
    MappedStatement对参数的类型进行转化,随后操作数据库,最后将数据库中返回的结果转化为java中的类型。
    在这里插入图片描述
    Mybatis执行流程
  1. 读取Mybatis配置文件,mybatis-config.xml加载运行环境和映射文件
  2. 构建会话工厂SqlSessionFactory
  3. 会话工厂创建SqlSession对象(包含了执行sql语句的所有方法)
  4. 操作数据库的接口,Executor执行器,同时负责查询缓存的维护
  5. Exector接口的执行方法中有一个MappedStatement类型的参数,封装了映射信息
  6. 输入参数映射
  7. 输出结果的映射

在这里插入图片描述
查询用户的时候,把用户所属的订单数量也查询出来,这个是立即加载
查询用户的时候,暂时不查询订单数据,当需要订单的时候再查询订单,这个就是延迟加载

延迟加载的原理

  1. 使用CGLIB创建目标对象的代理对象
  2. 当调用目标方法user.getOrderList()时,进入拦截器invoke方法,发现user.getOrderList()是null值时,执行sql查询order列表
  3. 把order查询上来,然后调用user.setOrderList(List< Order > orderList),接着完成user.getOrderList()方法调用。
    在这里插入图片描述
    Mybatis是否支持延迟加载?
  • 延迟加载的意思是:就是需要用到数据时才进行加载,不需要用到数据时就不加载数据
  • Mybatis支持一对一关联和一对多关联集合对象的延迟加载
  • 在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled = true | false。默认是关闭的

延迟加载的底层原理知道吗?
4. 使用CGLIB创建目标对象的代理对象
5. 当调用目标方法时,进入拦截器invoke方法,发现目标方式是null值,执行sql查询
6. 获取数据之后,调用set方法设置属性值,再继续查询目标方法,就有值了

Mybatis缓存

Mybatis的一级,二级缓存用过吗?
在这里插入图片描述

  • 本地缓存,基于PerpetualCache,本质上是一个HashMap
  • 一级缓存:作用域是session级别
  • 二级缓存:作用域是namespace和mapper作用域,不依赖于session

一级缓存
一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当session进行flush或close之后,该session中所有的cache就将清空,默认打开一级缓存
在这里插入图片描述
如果同时去调用同一个mapper的同一个方法,那么他就会使用一级缓存

二级缓存
二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认也是采用PerpetualCache。HashMap存储
在这里插入图片描述

二级缓存是默认关闭的:
开启方式,两步:

  1. 局部配置文件
<settings>
    <setting name="cacheEnabled" value="true"></setting>
</settings>
  1. 映射文件
    使用< cache/ >标签让当前mapper生效二级缓存

Mybatis的一级缓存,二级缓存用过吗?

  • 一级缓存,基于Perpetual的HashMap本地缓存,其存储作用域是Session,当Session进行flush或close之后,该session中的所有cache就将清空默认打开一级缓存。
  • 二级缓存是基于namespace和mapper的作用域起作用的,不是依赖SQL Session,默认也是采用了PerpetualCache,HashMap存储,需要单独开启,一个核心配置,一个mapper映射文件
    Mybatis的危机缓存什么时候清除缓存数据
    当某一个作用域(一级缓存Session/二级缓存Session)进行了新增,修改,删除等操作后,默认打开该作用域下的所有select中的缓存将被clear。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python整数筛选方法

Python整数筛选方法 Python是一种极其强大的编程语言&#xff0c;特别适合用于数据科学和数字计算。在数字计算中&#xff0c;经常需要筛选出指定范围内的整数。下面将介绍几种Python中筛选整数的方法。 1. 利用循环筛选 最简单的方法是使用循环&#xff0c;逐个检查每个数字…

关于Sui x KuCoin Labs夏季黑客松的七个关键信息

为促进Sui生态发展更进一步&#xff0c;Sui与KuCoin Labs联合举办夏季黑客松&#xff0c;希望能聚集全球加密英才&#xff0c;利用Sui产业领先的技术堆栈激荡出新的火花&#xff0c;为加密产业和Sui生态引入新的力量。本次黑客松总奖金达28.5万美元&#xff0c;分为多个赛道&am…

【React】React中编写CSS,Redux

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 React中编写CSS内联样式普通csscss modulescss in js动态添加class ReduxJS纯函数如何创建redux…

MVC 模式及对象持久化

MVC 模式及对象持久化 开发框架简介对象关系映射ORM 技术 Struts2 框架的使用Struts2 框架的下载及部署Struts2 配置 开发框架简介 在了解MVC 之前&#xff0c;首先来了解框架的概念。要理解框架的含义得从开发的实际需求说起。在软件开发过程中总有很多基础的功能是相同或者相…

荣耀MagicBook如何重装系统?荣耀MagicBook重装Win10系统教程

荣耀MagicBook如何重装系统&#xff1f;荣耀MagicBook是一款12小时长续航独显轻薄本&#xff0c;深受用户的喜欢&#xff0c;有些用户想知道如何给荣耀MagicBook重装Win10系统&#xff0c;操作难度不会很大&#xff0c;用户们可以根据小编给大家分享的荣耀MagicBook重装Win10系…

【FPGA零基础学习之旅#8】阻塞赋值与非阻塞赋值讲解

&#x1f389;欢迎来到FPGA专栏~阻塞赋值与非阻塞赋值 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家…

Redis从入门到精通【高阶篇】之底层数据结构跳表(SkipList)

文章目录 0.前言1.跳表(SkipList)基本详解2. 源码解析3.总结4.思考题5. Redis从入门到精通系列文章 0.前言 上个篇章回顾&#xff0c;我们上个章节我们学习了《Redis从入门到精通【高阶篇】之底层数据结构整数集(IntSet)详解》&#xff0c;我们从源码层了解整数集由一个头部和…

Day08 Python数据结构(数据容器)详解

文章目录 第五章 Python数据容器5.1. 容器类型介绍5.2. 数据容器运算符5.2.1. 成员运算符5.2.2. 身份运算符 5.3. 字符串str5.3.1. 字符串的定义5.3.2. 运算符的相关操作5.3.3. 索引和切片5.3.3.1. 索引5.3.3.2. 切片 5.3.4. 字符串遍历5.3.5. 字符串的相关操作5.3.5.1. 获取的…

git安装以及git小乌龟使用

一、下载git 打开git官网地址&#xff1a;https://git-scm.com/进行下载 下载完安装&#xff0c;一直next就好&#xff0c;如果愿意就可以改下安装路径&#xff0c;改在d盘。 具体可以参考&#xff1a;git安装教程 二、安装完下载小乌龟以及语言包 下载地址&#xff1a;小乌龟…

【OpenMMLab AI实战营二期笔记】第六天 目标检测和MMDetection

1.什么是目标检测&#xff1f; 目标检测 vs 图像分类 目标检测的应用 &#xff08;1&#xff09;人脸识别 &#xff08;2&#xff09;智慧城市 &#xff08;3&#xff09;自动驾驶 &#xff08;4&#xff09;下游视觉任务&#xff1a;场景文字识别、人体姿态估计 目标检测技术…

微服务 springcloud 08.zuul框架,API网关,整合ribbon和hystrix框架

01.zuul是作为springcloud中的一个网关框架来使用的。 zuul API 网关&#xff0c;为微服务应用提供统一的对外访问接口。 zuul 还提供过滤器&#xff0c;对所有微服务提供统一的请求校验。 在项目中的位置&#xff1a; 02.新建 sp11-zuul 项目 03.pom.xml 需要添加 sp01-com…

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

纺织工厂运营神技,不会你就OUT了!

在纺织工业中&#xff0c;保持适宜的生产环境是至关重要的。温湿度、能耗、设备运行状态以及空气质量等因素对纺织品的质量和生产效率都有着重要影响。 为了实现对生产环境的全面监控和管理&#xff0c;纺织企业越来越多地采用动环监控系统。 客户案例 湖州市某纺织工厂监控项目…

USART2实现Motbus485通信

本文用的单片机是原子的战舰V4 1. 先来驱动一下usart2 USART驱动配置一般步骤: STEP1&#xff1a;使能相关时钟&#xff0c;这块板子usart2用到了A2、A3分别为TX脚、RX脚&#xff0c;D7的作用是发送接收模式控制。下面开启GPIO与USART2时钟&#xff1a; RCC_APB1PeriphClockCm…

SpringBoot中打印 sql 语句

系列文章目录 文章目录 系列文章目录前言一、在配置文件中 application.yml 配置即可二、#Log4g打印SqL语句三、配置Logback总结 前言 在SpringBoot中&#xff0c;我们可以使用日志框架来打印SQL语句&#xff0c;常用的日志框架有Logback和Log4j2。下面以Logback为例&#xff…

35:考虑virtual函数以外的其他选择

假设你正在写一个视频游戏软件&#xff0c;你打算为游戏内的人物设计一个继承体系&#xff0c;剧中人物被伤害或因其他因素而降低健康状态的情况并不罕见。你因此决定提供一个成员函数healthValue&#xff0c;它会返回一个整数&#xff0c;表示人物的健康程度。 由于不同的人物…

Linux x86_64平台同时编译x86_64和arm64两个架构的Qt应用程序出现XRes库无法找到

一 背景 在ubuntu x86_64平台上需要同时编译x86_64和arm64两个架构的Qt应用程序。在实践过程中&#xff0c;发现XRes库只能安装在其中一个平台。 二 根因 安装amd64版本的XRes库会删除arm64版本的库&#xff0c;反之亦然。 在安装amd64版本时&#xff0c;会删除arm64版本&a…

内部员工有没有在线帮助文档可以使用呢

当今企业中&#xff0c;内部员工的工作内容变得越来越复杂&#xff0c;需要不断学习新的知识和技能。在这种情况下&#xff0c;企业需要给员工提供一种便捷的在线帮助文档&#xff0c;使员工能够更加高效地完成工作任务。本文将介绍企业内部员工在线帮助文档的重要性以及如何建…

区块链如何助力价值互联网?这些专家有话说

6月13日&#xff0c;由开放原子开源基金会主办&#xff0c;XuperCore开源项目承办的2023开放原子全球开源峰会区块链分论坛在北京举办。来自区块链领域内的专家、行业代表汇聚一堂&#xff0c;分别以主题演讲、圆桌论坛等形式&#xff0c;阐述了全球区块链行业的新理念、新发展…

Opencv仿射函数getAffineTransform底层实现原理

推导 三角形ABC仿射成为三角形DEF的变换矩阵M 猜测矩阵M [ [a1,b1,c1], [a2,b2,c2] ] 仿射变换的数学联系 对于A点和D点 AX*a1AY*b1c1DX AX*a2AY*b2c1DY 对于B点和E点 BX*a1BY*b1c1EX BX*a2BY*b2c2EY 对于C点和F点 CX*a1CY*b1c1FX CX*a2CY*b2c2FY 求解 对以上数…