1. MyBatis 中 #{}和 ${}的区别是什么?

\#{}是预编译处理,${}是字符替换。

在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全。

2. MyBatis 有几种分页方式?

分页方式:逻辑分页和物理分页。

逻辑分页: 使用 MyBatis 自带的 RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。

物理分页: 自己手写 SQL 分页或使用分页插件 PageHelper,去数据库查询指定条数的分页数据的形式。

3. RowBounds 是一次性查询全部结果吗?为什么?

RowBounds 表面是在“所有”数据中检索数据,其实并非是一次性查询出所有数据,因为 MyBatis 是对 jdbc 的封装,在 jdbc 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库查询多少条数据,假如你要查询更多数据,它会在你执行 next()的时候,去查询更多的数据。就好比你去自动取款机取 10000 元,但取款机每次最多能取 2500 元,所以你要取 4 次才能把钱取完。只是对于 jdbc 来说,当你调用 next()的时候会自动帮你完成查询工作。这样做的好处可以有效的防止内存溢出。

4. MyBatis 逻辑分页和物理分页的区别是什么?

  • 逻辑分页是一次性查询很多数据,然后再在结果中检索分页的数据。这样做弊端是需要消耗大量的内存、有内存溢出的风险、对数据库压力较大。
  • 物理分页是从数据库查询指定条数的数据,弥补了一次性全部查出的所有数据的种种缺点,比如需要大量的内存,对数据库查询压力较大等问题。

5. MyBatis 是否支持延迟加载?延迟加载的原理是什么?

MyBatis 支持延迟加载,设置 lazyLoadingEnabled=true 即可。

延迟加载的原理的是调用的时候触发加载,而不是在初始化的时候就加载信息。比如调用 a. getB(). getName(),这个时候发现 a. getB() 的值为 null,此时会单独触发事先保存好的关联 B 对象的 SQL,先查询出来 B,然后再调用 a. setB(b),而这时候再调用 a. getB(). getName() 就有值了,这就是延迟加载的基本原理。

6. 说一下 MyBatis 的一级缓存和二级缓存?

  • 一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,它的声明周期是和 SQLSession 一致的,有多个 SQLSession 或者分布式的环境中数据库操作,可能会出现脏数据。当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认一级缓存是开启的。
  • 二级缓存:也是基于 PerpetualCache 的 HashMap 本地缓存,不同在于其存储作用域为 Mapper 级别的,如果多个SQLSession之间需要共享缓存,则需要使用到二级缓存,并且二级缓存可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态)。

开启二级缓存数据查询流程:二级缓存 -> 一级缓存 -> 数据库。

缓存更新机制:当某一个作用域(一级缓存 Session/二级缓存 Mapper)进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

7. MyBatis 和 hibernate 的区别有哪些?

  • 灵活性:MyBatis 更加灵活,自己可以写 SQL 语句,使用起来比较方便。
  • 可移植性:MyBatis 有很多自己写的 SQL,因为每个数据库的 SQL 可以不相同,所以可移植性比较差。
  • 学习和使用门槛:MyBatis 入门比较简单,使用门槛也更低。
  • 二级缓存:hibernate 拥有更好的二级缓存,它的二级缓存可以自行更换为第三方的二级缓存。

MyBatis-面试题相关推荐

  1. mysql和mybatis面试题_2020年,MyBatis常见面试题总结

    Mybatis 技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用 Mybatis 的文章,所以,一些参数使用细节略掉了,我们的目标 ...

  2. 面试官都会问的Mybatis面试题,你会这样回答吗?

    一.概述 面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:"面试 ...

  3. MyBatis面试题库

    这里写目录标题 Mybatis面试题库 1.Mybatis是什么? 2.Mybaits的优点: 3.Mybatis框架的缺点 4.MyBatis框架的适用场合 5.当实体类中的属性名和表中的字段名不一 ...

  4. MyBatis面试题1

    MyBatis面试题(1) 众所周知,MyBatis是ssm三大框架之一,也是在以后的开发过程中的一个重要的框架,相对其他的两个框架而言,MyBatis框架更容易理解一些:在开发工程师的面试中,面试官 ...

  5. 5.MyBatis源码解析-MyBatis面试题--阿呆中二

    MyBatis面试题 MyBatis MyBatis面试题 MyBatis一级缓存和二级缓存? MyBatis 有几种执行器和区别? Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能 ...

  6. 2021年MyBatis面试题30道

    文章目录 前言 面试题系列文章传送门 MyBatis面试题内容 1. 模糊查询like语句该怎么写? 2. MyBatis 框架适用场合? 3. MyBatis是如何进行分页的?分页插件的原理是什么? ...

  7. 【2021最新版】MyBatis面试题总结(38道题含答案解析)

    文章目录 1.什么是Mybatis? 2.Mybaits的优点? 3.MyBatis框架的缺点? 4.MyBatis框架适用场合 5.MyBatis与Hibernate有哪些不同? 6.#{} 和${ ...

  8. Mybatis面试题整理

    文章目录 Mybatis面试题 1. 谈谈 MyBatis 2. Mybatis 的优点 3. Mybatis 的缺点 4. 什么是 ORM 5. 为什么说 Mybatis 是半自动 ORM 映射工具 ...

  9. 【10月最新】必问的25道mybatis面试题,都会的话你也可以去大厂

    目录 1.#{}和${}的区别是什么? 2.Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签? 3.最佳实践中,通常一个Xml映射文件,都会写一个 ...

  10. i了i了,这简直就是2020全网最全最强的MyBatis面试题!

    题目大纲 ps:先上题,答案在后面 1.什么是MyBatis? 2.讲下MyBatis的缓存 3.Mybatis是如何进行分页的?分页插件的原理是什么? 4.简述Mybatis的插件运行原理,以及如何 ...

最新文章

  1. Activity的4种启动模式
  2. 网络营销激烈竞争下,网站被黑了怎么办?
  3. 哪本python入门书内容最详细-重磅 | 由浅入深的 AI 学习路线,最详细的资源整理!...
  4. C/C++如何整行读入字符串?
  5. js插件---WebUploader 如何接收服务端返回的数据
  6. [算法]一次商品交易利益最大化
  7. java任务_Java 任务处理
  8. URLEncoder编码
  9. 一文看懂高可用:异地多活
  10. flutter和webapp_Flutter 适配移动端和web不同尺寸
  11. 华为y220t android版本升级,华为 Y220T(移动版)救砖教程 救砖包 刷回官方系统支持OTA升级...
  12. VB6.0鼠标注册详细教程
  13. Android系统终端命令大全
  14. 华为od python_华为运维开发-华为OD工资待遇怎么样 - 华为技术有限公司 - 职友集...
  15. python普通人能学吗_普通人可以学Python吗
  16. 如何成功对接APP项目资源
  17. 超实用的Mac风扇控制系统:Macs Fan Control Pro mac中文版
  18. 删除电脑属性制造商_修改Win7系统GHO中OEM信息图文教程
  19. 自从看了<<麦肯锡的领导力法则>>之后......
  20. Ubuntu 开机自动开启数字键小键盘

热门文章

  1. centos6.5 nginx1.8 php mysql,CentOS6.5 源码安装Nginx1.8 + PHP7.0.6 + MySQL5.7.12
  2. 【Teradata SQL】禁用和启用数据库用户登录
  3. VS2010+OpenMP的简单使用
  4. Oracle实战笔记(第二天)
  5. linux网络命令详解
  6. 日更第8期-2015-3-23-如何科学地使用因特网-第三讲-为什么要用Git Bash?咱们用Github for Windows吧!(上)...
  7. 刚刚收到的邮件,Google对Admob的收购已经顺利结束
  8. 如何在Linux上部署Jenkins
  9. apache 启用 gzip压缩
  10. (45)VHDL实现算术器