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

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.xdnf.cn/news/10795.html

相关文章:

  • dvwa7——SQL Injection
  • CentOS 7镜像源替换
  • 豆包的图片生成功能基于其底层AI模型,结合了多模态大模型和图像生成技术,其核心逻辑主要包括以下几个部分:
  • mac下通过anaconda安装Python
  • 你的台式机PCIe插槽到底是几条lane
  • 电脑硬盘分几个区好
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Dad Jokes(冷笑话卡片)
  • VueScan:全能扫描,高清输出
  • 《Linux C编程实战》笔记:多路复用
  • vue3:Table组件动态的字段(列)权限、显示隐藏和左侧固定
  • Oracle中的循环——FOR循环、WHILE循环和LOOP循环
  • 免费批量文件重命名软件
  • Spring AI Alibaba + Nacos 动态 MCP Server 代理方案
  • 重新审视自回归语言模型的知识蒸馏
  • 总览四级考试
  • 用AI(Deepseek)做了配色网站-功能介绍【欢迎体验】
  • 电子电路:全面深入了解晶振的定义、作用及应用
  • linux安全加固(非常详细)
  • Redis:常用数据结构 单线程模型
  • 多线程编程中的数据竞争与内存可见性问题解析
  • [Java 基础]变量,装东西的盒子
  • 基于QwenAgent解锁Qwen3无思考高效模式:vLLM部署实战与Ollama模板定制
  • 美尔斯通携手北京康复辅具技术中心开展公益活动,科技赋能助力银龄健康管理
  • RabbitMQ在SpringBoot中的应用
  • 六步完成软件验收:从计划到终验的全面指南(二)
  • smartGit 试用突破30天
  • HCIP(BGP基础)
  • 工厂方法模式深度解析:从原理到应用实战
  • 【灵动Mini-F5265-OB】vscode+gcc工程创建、下载、调试
  • Unity——QFramework框架 内置工具