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

MyBatis相关面试题

提示:MyBatis相关面试题,持续更新中

文章目录

  • 1、MyBatis框架是如何实现分页的?
  • 2、说一说MyBatis框架里面的缓存机制是怎么回事?
    • (1)一级缓存
    • (2)二级缓存


1、MyBatis框架是如何实现分页的?


分页分为两种:逻辑分页:将所有数据查询出来,再在内存中进行分页处理;物理分页:直接在数据库中进行分页;具体实现:1、自己写SQL进行分页;(物理分页)2、使用拦截器进行分页;(物理分页)3、使用PageHelper进行分页;(物理分页)4、使用RowBounds进行分页;(逻辑分页)

2、说一说MyBatis框架里面的缓存机制是怎么回事?

MyBatis中有两级缓存:一级缓存 和 二级缓存;

(1)一级缓存

在这里插入图片描述


1、一级缓存是SqlSession级别的缓存, 通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会再从数据库查询;2、一级缓存是默认开启的,是不能关闭的,但可以调用SqlSessionclearCache()方法清理缓存;3、不同SqlSession之间的缓存数据是隔离的,即一个SqlSession中的缓存数据在另一个SqlSession中是读取不到的;4、一级缓存的作用范围可以配置两种:local-cache-scope: statement(配置后,会清理缓存,相当于缓存失效)local-cache-scope: session(默认)--------------------------------------------------------------------------------------------------------------------一级缓存失效的几种情况1、不同的SqlSession对应不同的一级缓存;2、同一个SqlSession但是查询条件不同;3、同一个SqlSession两次查询期间执行了任何一次增删改操作;4、同一个SqlSession两次查询期间手动清空了缓存;--------------------------------------------------------------------------------------------------------------------注:以下代码,若不开启事务,每一次的goodsDao.queryByPage()都是新的sqlsession不会存在一级缓存,只有开启事务后,才会有一级缓存@Resourceprivate GoodsDao goodsDao;//@Transactional@Overridepublic List<Goods> queryByPage(Integer startRow, Integer pageSize) {List<Goods> list1 = goodsDao.queryByPage(startRow, pageSize);System.out.println("查詢1:" + list1 + "\n");List<Goods> list2 = goodsDao.queryByPage(startRow, pageSize);System.out.println("查詢2:" + list2 + "\n");return list2;}

(2)二级缓存

二级缓存在SqlSession提交或关闭后才生效;

在这里插入图片描述


二级缓存默认是关闭的,开启二级缓存,需要同时有如下两项:application.yml  mybatis:configuration:cache-enabled: trueMapper.xml<cache/>二级缓存是跨SqlSession的,多个SqlSession可以共用同一个二级缓存;二级缓存是mapper级别的缓存,根据mapper的namespace区分,两个mapper的namespace相同,则这两个mapper执行sql查询到的数据将缓存到相同的二级缓存区域中;使用二级缓存的POJO类要实现Serializable接口;
http://www.lqws.cn/news/88759.html

相关文章:

  • 【CBAP50技术手册】#34 Process Analysis(流程分析):业务分析师的“优化镜头”
  • 2025年06月03日Github流行趋势
  • C++和C#界面开发方式的全面对比
  • 爱果果H5素材网站
  • C++学习-入门到精通【13】标准库的容器和迭代器
  • rabbitMQ初入门
  • 【Kotlin】表达式关键字
  • SOC-ESP32S3部分:27-设备OTA
  • [Java 基础]Java 是什么
  • T/CCSA 663-2025《医疗科研云平台技术要求》标准解读与深度分析
  • 华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
  • C++ Vector算法精讲与底层探秘:从经典例题到性能优化全解析
  • C++实现汉诺塔游戏用户交互
  • AI Agent开发第78课-大模型结合Flink构建政务类长公文、长文件、OA应用Agent
  • 【数据分析】第四章 pandas简介(2)
  • 线性回归用于分类
  • 景区停车预警系统:从检测到疏导,告别拥堵!
  • 第3篇:数据库路由模块设计与 SQL 路由策略解析
  • 通过基于流视频预测的可泛化双手操作基础策略
  • 【嵌入式(2)深入剖析嵌入式开发:从基础到实战】
  • 每日算法 -【Swift 算法】查找字符串数组中的最长公共前缀
  • 【Linux内核】设备模型之udev技术详解
  • 【数据库】安全性
  • Ubuntu中TFTP服务器安装使用
  • 论文分类打榜赛Baseline:ms-swift微调InternLM实践
  • 穿越文件之海:Linux链接与库的奇幻旅程,软硬连接与动静态库
  • 【数据结构知识分享】顺序表详解
  • 【眼镜店管理专用软件】佳易王眼镜店处方开单视力检查管理系统功能操作教程#视力检查#旧镜检查#开单打印
  • FastMCP:构建 MCP 服务器和客户端的高效 Python 框架
  • 使用nginx配置反向代理,负载均衡