面试有点慌?来看看18个MyBatis高频知识及学习笔记

MyBatis 高频面试题 阅读详情

什么是MyBatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。是一个基于Java的持久层框架

下面是精心整理的18个MyBatis高频知识及学习笔记,不管处不处在面试阶段的朋友都可以领取保存,以备不时之需

01 18个MyBatis高频知识点(含解析)

  1. 精讲#{}和${}的区别是什么?
  2. 数据库链接中断如何处理?
  3. 在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?
  4. 事务执行过程中宕机的应对处理方式?
  5. 高性能服务器端端开发底层主要靠I/O复用来处理,这种模式:
  6. Mybatis中的Dao接口和XML文件里的SQL是如何建立关系的?
  7. 当实体类中的属性名和表中的字段名不一样,怎么办 ?
  8. 模糊查询like语句该怎么写?
  9. 什么是MyBatis的接口绑定?有哪些实现方式?
  10. 使用MyBatis的mapper接口调用时要注意的事项
  11. 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
  12. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
  13. Mybatis的一级、二级缓存的作用是什么?
  14. Mybatis 是如何进行分页的?分页插件的原理是什么?
  15. Mybatis 动态 SQL 是做什么的?都有哪些动态 SQL ?能简述一下动态 SQL 的执行原理吗?
  16. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
  17. Mybatis都有哪些Executor执行器?它们之间的区别是什么?
  18. MyBatis与Hibernate区别?

1 精讲#{}和${}的区别是什么?

  • mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值。
  • mybatis在处理时,就是把{}时,就是把时,就是把{}替换成变量的值。
  • 使用#{}可以有效的防止SQL注入,提高系统安全性。原因在于:预编译机制。预编译完成之后,SQL的结构已经固定,即便用户输入非法参数,也不会对SQL的结构产生影响,从而避免了潜在的安全风险。
  • 预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。

既然{}会引起sql注入,为什么有了#{}还需要有{}呢?那其存在的意义是什么?
#{}主要用于预编译,而预编译的场景其实非常受限,而${}用于替换,很多场景会出现替换,而这种场景可不是预编译
2 数据库链接中断如何处理?
数据库的访问底层是通过tcp实现的,当链接中断是程序是无法得知,导致程序一直会停顿一段时间在这,最终会导致用户体验不好,因此面对数据库连接中断的异常,该怎么设置mybatis呢?
connection操作底层是一个循环处理操作,因此可以进行时间有关的参数:

  • max_idle_time : 表明最大的空闲时间,超过这个时间socket就会关闭
  • connect_timeout : 表明链接的超时时间

数据库服务器活的杠杠的,但是因为网络用塞,客户端仍然连不上服务器端,这个时候就要设置timeout,别一直傻等着
3 在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?
插入的过程一般都是分两步的:先判断是否存在记录,没有存在则插入否则不插入。如果存在并发操作,那么同时进行了第一步,然后大家都发现没有记录,然后都插入了数据从而造成数据的重复
解决插入重复的思路 :

  • 先判断数据库是否存在数据,有的话则不进行任何操作。没有数据的话,进行下一步;
  • 向redis set key,其中只有一个插入操作A会成功,其他并发的操作(B和C...)都会失败的 ;
  • 当set key 成功的操作A,开始执行插入数据操作,无论是否插入数据成功,都在需要将redis key删除。【注】插入不成功可以多尝试几次,增加成功的概率 ;
  • 然而set key 失败的操作B和C,sleep一下,竞争赢的插入操作重复以上步骤。

总结:多线程同时插入数据,谁获取锁并插入数据成功了其他线程不做任何操作。当插入数据失败后,其他线程抢锁进行插入数据。
篇幅有限,完整版18个Mybatis高频知识点如下所示:
(需要下载完整版的朋友可以 私信 “学习” 免费领取~~)


02 32道面试常见的MyBtis题目+解析

  1. 什么是 MyBatis?讲下 MyBatis 的缓存
  2. Mybatis 是如何进行分页的?分页插件的原理是什么?
  3. 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
  4. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
  5. #{}和${}的区别是什么?
  6. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  7. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  8. MyBatis 与 Hibernate 有哪些不同?
  9. MyBatis 的好处是什么?
  10. 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
  11. 什么是 MyBatis 的接口绑定,有什么好处?
  12. 接口绑定有几种实现方式,分别是怎么实现的?
  13. 什么情况下用注解绑定,什么情况下用 xml 绑定?
  14. MyBatis 实现一对一有几种方式?具体怎么操作的?
  15. Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
  16. MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?
  17. Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
  18. Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
  19. 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
  20. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
  21. Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
  22. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
  23. Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
  24. Mybatis 中如何指定使用哪一种 Executor 执行器?
  25. Mybatis 执行批量插入,能返回数据库主键列表吗?
  26. Mybatis 是否可以映射 Enum 枚举类?
  27. 如何获取自动生成的(主)键值?
  28. 在 mapper 中如何传递多个参数?
  29. resultType resultMap 的区别?
  30. 使用 MyBatis 的 mapper 接口调用时有哪些要求?
  31. Mybatis 比 IBatis 比较大的几个改进是什么?
  32. IBatis 和 MyBatis 在核心处理类分别叫什么?在细节上的不同有哪些?

1 什么是 MyBatis?
答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。
2 讲下 MyBatis 的缓存
答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓
存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化
接口(可用来保存对象的状态),可在它的映射文件中配置
3 Mybatis 是如何进行分页的?分页插件的原理是什么?
答:
1)Mybatis 使用 RowBounds 对象进行分页,也可以直接编写 sql 实现分页,也可以使用
Mybatis 的分页插件。
2)分页插件的原理:实现 Mybatis 提供的接口,实现自定义插件,在插件的拦截方法内拦
截待执行的 sql,然后重写 sql。
举例:select * from student,拦截 sql 后重写为:select t.* from (select * from student)tlimit 0,10
4 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
答:
1)Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、
Executor 这 4 种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理对象以实
现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是
InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
2)实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写注解,指定
要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

篇幅有限,完整版32道面试常见的Mybatis题目+解析如下所示:


03 MyBatis技术内幕(书籍PDF)

  1. 第1章 MyBatis快速入门
  2. 第2章 基础支持层
  3. 第3章 核心处理层
  4. 第4章 高级主题


最后分享一波
需要文中分享的那些MyBatis全部学习资料的朋友注意啦,
转发+私信 “学习”即可免费领取!!!
好啦,既然这次谈到了Mybatis,那么顺便这里在给大家分享一下 【SSM框架】的 技术图谱 以及 学习资料


最后说一次,需要MyBatis以及整个SSM框架的全部学习资料的,
转发+转发+转发+私信 “学习” 即可免费获取哦~~

2024Java程序员春招面试指南:7套高频面试专题(附答案解析 分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。 阅读详情

相关推荐

MyBatis最经典的20道面试题,你都会了吗?

MyBatis是一款优秀的持久层框架,在Java开发中广受欢迎。下面是一些常见的MyBatis面试题,以及相应的案例分析,希望对你的学习和面试有所帮助。MyBatis是一款基于Java的持久层框架,它通过XML描述符或注解将对象与存储过程或SQL语句进行映射,实现了面向对象编程与关系数据库的映射。动态SQL是MyBatis中的一项强大功能,它可以根据条件判断动态拼接SQL语句,避免硬编码。例如,动态SQL可以在条件成立时插入WHERE子句:

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 3万+

总结MyBatis知识点

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

初尘屿风的博客 2716

利用树莓派制作智能音箱

利用树莓派制作智能音箱

qq_61803022的博客 1776

Mybatis知识点总结

Mybatis知识点

weixin_46091414的博客 248

语义分割系列7-Attention Unet(pytorch实现)

本文介绍了AttentionUnet模型和其主要中心思想,并在pytorch框架上构建了Attention Unet模型,构建了Attention gate模块,在数据集Camvid上进行复现。

yumaomi的博客 2万+

EB TRESOS 29.0.0安装教程用于MCAL配置开发

本文介绍的搭建基于NXP官网提供EB软件,进行基于标准AUTOSAR软件底层驱动配置的开发

qq_53260940的博客 1872

面试还搞不懂MyBatis?快看看这27道面试题!(含答案和思维导图)

MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2401_85910670的博客 1010

Endnote 导入参考文献的时候,格式错误太多了。et.al错误,国标GBT7714在endnote中的详细配置教程,适用于本科,硕士论文文献插入的模板

EndNote插入文献常遇到以下错误主要如下: 等、et al不分; 英文作者全名大写; 期刊名字使用了缩写(图片里没有体现;卷号、期号缺失时出现乱码,多了半个括号;页码范围略去了相同部分;没有悬挂缩进,本文全部解决,全网最细

sakura的博客 3万+

知识点整理,MyBatis面试题

什么是Mybatis? 1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性 能,灵活度高。 2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数 据库中的记...

BoCong-Deng的博客 1万+

基于单片机控制双向可控硅灯光强度设计

*单片机设计介绍,基于单片机控制双向可控硅灯光强度设计。

QQ2193276455的博客 2456

整理 钢琴 约翰·汤普森现代钢琴(大汤)

大汤

TS的博客 3991

Mybatis知识点

预编译SQL是一种在执行SQL查询前将其编译并在数据库中存储的过程。这种方式主要用于提高性能、防止SQL注入攻击,并简化代码编写。:预编译SQL避免了每次执行时解析和编译SQL的时间,因为这些操作只需要在第一次执行时完成。后续的查询只需传递参数,而无需重新编译。:预编译语句通常会使用参数占位符(如问号?或命名参数),这样用户输入的数据会被安全地作为参数传递,而不是直接拼接到SQL语句中,从而防止恶意用户插入恶意SQL。

sdg_advance的博客 1254

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1844

面试的朋友听我说,18个MyBatis高频知识及学习笔记,双手奉上

1 精讲#{}和${}的区别是什么?2 数据库链接中断如何处理?数据库的访问底层是通过tcp实现的,当链接中断是程序是无法得知,导致程序一直会停顿一段时间在这,最终会导致用户体验不好,因此面对数据库连接中断的异常,该怎么设置mybatis呢?connection操作底层是一个循环处理操作,因此可以进行时间有关的参数:3 在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?解决插入重复的思路 :总结:多线程同时插入数据,谁获取锁并插入数据成功了其他线程不做任何操作。当插入数据失败后,其他线程抢锁进行插

m0_72136664的博客 439

黑猫带你学eMMC协议第4篇:eMMC概述

1 前言 声明: 本文依据eMMC JEDEC5.1协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 本文大约3000字,从emmc的内部结构框架、供电、总线、寄存器等各方面进行框架性的介绍,本章节内容不需要深入研究,读完本篇文章,只要能对emmc有个框架下的了解,就可以了。 2 内部结构框架 由图可以看出,emmc内部由两块组成:控制器 + 存储介质。emmc内部存储介质绝大部分为nand flash。 众所周知,我们需要存储数据到nand flash中,并

黑猫奥利奥的博客 3340

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

面试的朋友听我说,18 个 MyBatis 高频知识及学习笔记,双手奉上

答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。

m0_72011831的博客 586

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

18个MyBatis高频知识及学习笔记,啃完面试不愁!

答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。

Java_ttcd的博客 313

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

24道Mybatis高频面试题总结及详细解析!

下面分享24道MyBatis高频面试题解析 1、什么是Mybatis? 1.Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 2.MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJ...

lonely_bin的博客 1672

(BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等

如今互联网行业用的最多就是 MySQL,然而对于高级 Web 面试者,尤其对于寻找 30k 下工作的求职者,很多 MySQL 相关知识点基本都会涉及,如果面试中,你的相关知识答的模糊和不切要点,基本大多稍好公司的面试官,基本也不会对你有兴趣,毕竟稍微量大的项目,最终都会让你去深入数据库,而且最终的大多瓶颈首先也会出现在数据库。**问题十七:**Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?**问题二十五:**简述Mybatis的插件运行原理,以及如何编写一个插件。

2401_86400095的博客 2531

(BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)

如今互联网行业用的最多就是 MySQL,然而对于高级 Web 面试者,尤其对于寻找 30k 下工作的求职者,很多 MySQL 相关知识点基本都会涉及,如果面试中,你的相关知识答的模糊和不切要点,基本大多稍好公司的面试官,基本也不会对你有兴趣,毕竟稍微量大的项目,最终都会让你去深入数据库,而且最终的大多瓶颈首先也会出现在数据库。**问题十七:**Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?**问题二十五:**简述Mybatis的插件运行原理,以及如何编写一个插件。

2401_84407867的博客 786

【SSM面试篇】Spring、SpringMVC、SpringBoot、Mybatis高频八股汇总

总结Spring、SpringMVC、SpringBoot、Mybatis面试高频八股。

gadiaola的博客 1217

GitHub2021年度前100的Java面试真题&高频知识点汇总

这是我在工作、面试中学习并总结到的一些知识点,都是一些比较典型的、面试常常被问到的问题。如果你平时没有注意去总结的话,那么当你面试被问到的时候可能会是一脸懵圈,就算这个问题你知道怎么回事,但是你平时没有认真总结,你也可能会出现逻辑混乱的情况,从而错失工作机会。有些知识点不经常使用就会忘记,但是面试还会问,对此,我也是深受其害,所以我决定将这些遇见的问题整理下来,分享出去,帮助更多的人,我们共同进步。imagejava只是一个工具;

caihuayuan5的博客 872

摊牌了!18个MyBatis高频知识(附解析)及学习笔记全在这了!!

预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。...

weixin_66896902的博客 221

BAT 面试 Java 岗常问高频 100 题:Spring+ 微服务 +SpringMVC+MyBatis

前言 很多小伙伴可能会很困惑,为什么 BAT 的面试官总是喜欢问源码?其实我们常用的 Spring、MyBaits 这样的框架可以说是 JAVA 里面最经典的教科书,从中你能学习到很多写代码的经验技巧,而去悟开源框架中蕴含的优雅架构设计之道这才是最重要的。微服务架构是一种架构风格,整个应用被划分并设计为以业务域为模型的松散耦合的独立服务,方便横向扩展能力、伸缩性强、便于开发和维护等等这些是微服务与生俱来的优势,面试的时候也都会问到 SpringBoot,Cloud 的问题。 在这分享一些 Java 面试

gu1857035894的博客 1188

BAT面试Java岗常问高频100题:Spring+微服务+SpringMVC+MyBatis

前言 很多小伙伴可能会很困惑,为什么BAT的面试官总是喜欢问源码?其实我们常用的Spring、MyBaits这样的框架可以说是JAVA里面最经典的教科书,从中你能学习到很多写代码的经验技巧,而去悟开源框架中蕴含的优雅架构设计之道这才是最重要的。微服务架构是一种架构风格,整个应用被划分并设计为以业务域为模型的松散耦合的独立服务,方便横向扩展能力、伸缩性强、便于开发和维护等等这些是微服务与生俱来的优势,面试的时候也都会问到SpringBoot,Cloud的问题。 在这分享一些Java面试中常被问到Sp...

javassb的博客 359
上一篇: 学习java你必须要明白的垃圾收集器
下一篇: 看完这些,让你玩转JAVA筑基之Netty、并发编程与设计模式
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值