当前位置: 首页 > 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.xdnf.cn/news/1398277.html

相关文章:

  • 执行一条Select语句流程
  • python pyqt5开发DoIP上位机【诊断回复的函数都是怎么调用的?】
  • Jedis、Lettuce、Redisson 技术选型对比
  • 【前端教程】HTML 基础界面开发
  • Dify工作流之合同信息提取
  • 【74LS112JK触发器三进制】2022-10-8
  • 常量指针与指针常量习题(一)
  • 每日算法题【二叉树】:二叉树的最大深度、翻转二叉树、平衡二叉树
  • GROMACS 安装:详细教程来袭
  • 上层协议依赖TCP
  • 【系列10】端侧AI:构建与部署高效的本地化AI模型 第9章:移动端部署实战 - iOS
  • pdf转ofd之移花接木
  • 面试 八股文 经典题目 - Mysql部分(一)
  • jsqlparser(六):TablesNamesFinder 深度解析与 SQL 格式化实现
  • Java中使用正则表达式的正确打开方式
  • 在Kotlin中安全的管理资源
  • ⸢ 叁 ⸥ ⤳ 默认安全:概述与建设思路
  • Vue2之axios在脚手架中的使用以及前后端交互
  • MongoDB 聚合管道(Aggregation)高级用法:数据统计与分析
  • destoon8.0根据模块生成html地图
  • Go 语言面试指南:常见问题及答案解析
  • Excel工作技巧
  • 【自然语言处理与大模型】多机多卡分布式微调训练的有哪些方式
  • 【Python】并发编程(一)
  • 网络工程师软考选择题精讲与解题技巧
  • Ubuntu系统下交叉编译Android的X264库
  • 【Qt开发】按钮类控件(一)-> QPushButton
  • 互联网大厂面试:大模型应用开发岗位核心技术点解析
  • LeetCode54螺旋矩阵算法详解
  • MySQL數據庫開發教學(四) 後端與數據庫的交互