当前位置: 首页 > news >正文

Java面试-MyBatis篇

一、MyBatis执行流程:

  • 读取核心配置文件:包含运行环境配置(指定操作数据库、用户名和密码)和加载映射文件(可指定单个文件或扫描包)。
  • 构建会话工厂:SQL Session Factory全局只有一个,用于创建多个SQL Session对象,SQL Session包含执行SQL语句的方法。
  • 执行器操作:Executor执行器封装JDBC操作,维护一级和二级缓存。
  • Mapper Statement对象:封装Mapper接口映射文件中标签的信息,如查询类型、方法名、返回值、SQL语句等。
  • 参数与结果类型转换:将Java参数类型转换为数据库支持的类型进行操作,操作完成后再将数据库类型转换为Java类型。

二、MyBatis延迟加载:

  • 定义与示例:延迟加载即按需加载,如查询用户时暂不查询订单,需要订单时再查询。以用户表和订单表一对多关系为例进行演示。
  • 配置方式:可在核心配置文件中设置lazy loading enable为true开启全局延迟加载,也可在映射文件中添加fetch type=lazy进行局部开启。
  • 底层原理:使用CGLIB创建目标对象的代理对象,调用目标方法时进入代理对象的invoke方法,判断属性是否为空,为空则执行SQL查询并封装结果。

三、MyBatis一级和二级缓存:

  • 缓存基本原理:请求先判断是否命中缓存,命中则直接返回数据,未命中则查询数据库并将数据存入缓存后返回。
  • 一级缓存:基于本地缓存(本质是哈希map),作用域是SQL Session,默认打开,session刷新或关闭后缓存清空。同一session多次查询相同数据,仅第一次执行SQL。
  • 二级缓存:基于命名空间和Mapper作用域,不依赖SQL Session,默认关闭。开启需在全局配置文件设置cache enable为true,在映射文件中添加cache标签。开启后不同session查询相同数据可命中缓存。
  • 注意事项:增删改操作会清空一级和二级缓存;二级缓存数据需实现Serializable接口;会话提交或关闭后,一级缓存数据会转移到二级缓存。
http://www.dtcms.com/a/358828.html

相关文章:

  • 【后端数据库】MySQL 索引生效/失效规则 + 核心原理
  • oha:一款轻量级HTTP负载测试工具
  • XHR 介绍及实践
  • 论文介绍:《Small Language Models are the Future of Agentic AI》
  • SSR降级CSR:高可用容灾方案详解
  • 使用axios封装post和get
  • istringviewstream 和 outstringstream
  • 嵌入式学习日记
  • 【3D算法技术入门】如何基于建筑图片重建三维数字资产?
  • 行内元素块元素
  • 【办公类-39-06】20250830通义万相水果图(万相2.1专业Q版线描风格+万相专业2.2默认简笔画效果)
  • “我店模式“当下观察:三方逻辑未变,三大升级重构竞争力
  • 如何提高微型导轨的生产效率?
  • 【Java EE进阶 --- SpringBoot】Spring Web MVC(Spring MVC)(二)
  • Qt中的QSS介绍
  • JavaScript 中的 this 关键字
  • 机器视觉学习-day11-图像噪点消除
  • VuePress添加自定义组件
  • android studio编译安卓项目报gradle下载失败
  • [光学原理与应用-337]:ZEMAX - 自带的用于学习的样例设计
  • 知识随记-----Qt 样式表深度解析:何时需要重写 paintEvent 让 QSS 生效
  • [算法] 双指针:本质是“分治思维“——从基础原理到实战的深度解析
  • 05.《ARP协议基础知识探秘》
  • 构建AI智能体:十八、解密LangChain中的RAG架构:让AI模型突破局限学会“翻书”答题
  • 银河麒麟V10(Phytium,D2000/8 E8C, aarch64)开发Qt
  • 魔方的使用
  • 进制转换问题
  • 【车载开发系列】CAN与CANFD上篇
  • 前端代码结构详解
  • Python数据处理