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

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注入。

给大家整理了mybatis的脑图,结合本文一起去学习,事半功倍,想要了解的,【脑图】滴我可取~

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高频知识点如下所示:

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 序列化

接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>

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题目+解析如下所示:

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

03 MyBatis技术内幕(书籍PDF)

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

希望分享的知识都可以帮助到大家,也希望大家学了都能有收获~

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

相关推荐

OpenVins解析:基于滤波框架的SLAM

这一方式存在的关键问题是匹配耗时很长,对性能影响显著。可以参考ORBSLAM3中的匹配方式来对其优化,比如左右目匹配可以在极线上搜索,前后帧可以利用运动先验投影匹配。理论上加入路标点会提升精度,代价是增加了计算量。着重说下基于描述子的匹配:OpenVins中匹配的方式是robust_match(),里面是调用的opencv的。openvins中不仅仅进行了传统的MSCKF更新(状态向量中不包含路标点),还在。中进行了包含路标点的估计更新。图像帧到来时,利用IMU递推得到的位姿给该图像帧赋初值。

qq_18076309的博客 4073

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

下面是精心整理的18个MyBatis高频知识及学习笔记,不管处不处在面试阶段的朋友都可以领取保存,以备不时之需01 18个MyBatis高频知识点(含解析)1 精讲#{}和${}的区别是什么?既然{}会引起sql注入,为什么有了#{}还需要有{}呢?那其存在的意义是什么? #{}主要用于预编译,而预编译的场景其实非常受限,而${}用于替换,很多场景会出现替换,而这种场景可不是预编译 2 数据库链接中断如何处理? 数据库的访问底层是通过tcp实现的,当链接中断是程序是无法得知,导致程序一直会停顿一段时间在这,

老男孩的架构路 288

HFSS与AI融合:智能算法如何重塑天线设计流程

本文探讨了HFSS与AI融合如何通过智能算法革新天线设计流程。在5G/6G通信时代,AI技术如机器学习和遗传算法显著提升了高频电磁场仿真效率,将传统设计周期从数周缩短至数小时,并优化了天线性能。文章详细介绍了AI与HFSS的集成策略、关键技术突破及典型应用案例,展示了智能算法在天线设计中的巨大潜力。

weixin_29035147的博客 774

总结MyBatis知识点

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

初尘屿风的博客 2716

科研ABC - The Results Section(SCI论文写作补充)

1 前言 1.1 IMRD格式 1.2 Results部分意义 1.3 Results部分主要内容 2 Results & Discussion关系 2.1 Results & Discussion部分的搭配方式 2.2 Results & Discussion部分的区分 3 Results部分的结构 3.1 Move 1: Set the Stage 3.1....

洋洋洋2020的blog 1615

AppleAccount注册之生成sign

根据日志发现:签名来自于AuthKit的-[AKAppleIDServerResourceLoadDelegate signRequest:withCompletionHandler:]的一个block,这个库是放在共享缓存库里的,找到提前准备好的IDA文件,先去找主方法,根据分析IDA,最后找到了实际生成签名的方法:t1。,接受五个参数,context(之前讲的获取到的客户端证书),bytes(待加密的body字节),length(字节长度),以及两个接受结果的参数,直接进这个方法看,

2503_90751938的博客 1002

Mybatis知识点总结

Mybatis知识点

weixin_46091414的博客 248

低功耗 AI 人体存在检测系统:智能照明与安防的高效解决方案

低功耗 AI 人体存在检测系统通过 “ESP32-C3 主控 + HX7110 AI 模块” 的硬件组合,搭配双重检测算法与深度睡眠机制,既解决了传统检测方案的误报问题,又满足了长时间低功耗运行需求。系统接线简单、代码可直接移植,可快速集成到智能照明、安防监控等物联网设备中,具备广泛的应用前景。

weixin_42300449的博客 224

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

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

2401_85910670的博客 1010

激光除草技术原理与应用全解析

激光除草技术通过光热、光化学等效应精准破坏杂草组织,核心参数包括功率(20-6000W)、波长(400nm-10.6μm)和脉冲宽度。主要应用于大田作物(如玉米、棉花)、经济作物(烟草、果树)及城市绿化,具有环保(无化学污染)、高效(识别率≥95%)和非接触等优势,但存在设备成本高(20-50万元)、技术门槛高等局限。当前技术融合AI识别、多光谱协同等创新,国产设备如华工智耘已实现95.3%识别精度。虽短期投入较高,但长期可降低30%除草成本,并带来环境效益(每亩减排1.2吨CO₂)

start_up_go的博客 556

MySQL 一一 MySQL基本使用

1、数据库 简单来说,所谓的数据库就是存储数据的容器,而且是永久存储的。 2、为什么需要数据库 3、为什么要学习MySQL数据库 最早MySQL数据,瑞典AB公司开发的一款开源型的关系型数据库。 随着时间的推移,瑞典AB公司把MySQL数据库转让给Sun公司(Java语言的创始公司) 后来,Sun公司经营不善,又把MySQL数据库转让给甲骨文公司(Oracle数据库) 4、数

Guizy 7万+

知识点整理,MyBatis面试题

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

BoCong-Deng的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

m0_72136664的博客 439

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

m0_72011831的博客 586

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

lonely_bin的博客 1672

Java面试题2025全新汇总八股文!包含海量面试题以及高频考点!

本文整理了一份全面的Java面试题汇总,涵盖Java基础、JVM、多线程并发、Spring框架、MyBatis、SpringBoot、MySQL等核心知识点。内容包含高频面试问题和重点技术解析,如String类的区别、HashMap原理、JVM垃圾回收、线程安全实现、Spring生命周期、MyBatis缓存机制等。这份资料已帮助多人获得大厂offer,完整版PDF包含更多详细题目和笔记,可供有需要的读者直接获取。

2401_83384536的博客 1509

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

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

2401_86400095的博客 2531

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

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

weixin_66896902的博客 221

过年期间啃完这7套Java面试题,年后面试阿里P7稳了,赶快放到收藏夹吃灰!

前言 2021年已经开始了,接近我们所说的“金三银四”也不到几个月的时间了,时间晃眼就过去了,有的人为了2021跳槽早早做足了准备,有的人在临阵磨刀,想必屏幕前的你也想在2021年涨薪吧,那么问题来了,怎么才能达到目标呢,不妨跟我来看看为大家盘点整理的一些高频面试问题吧!!! 一、Java基础 1.Java有哪些数据类型? 2.final有什么用? 3.介绍下static。 4."=="和equals方法究竟有什么区别? 5.java中有没有引用传递? 6.String s = “Hello”;s =

程序媛小琬的博客 423

mybatis 带分号批量sql_请查收,32 道 MyBatis 的高频面试题已答完

在网上找了 20 几道 MyBatis 的高频面试题,另补充了一些自己工作中遇到觉得比较重要的问题,共 32 道,如下:介绍一下 MyBatisMybaits 的优缺点MyBatis 的适用场景MyBatis 与 Hibernate 的区别#{} 和 ${} 的区别MyBatis 中实体类的属性名与表中的字段名不一致怎么处理?MyBatis 如何配置连接中断或执行超时?用 MyBatis...

weixin_33000813的博客 232

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

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

2401_84407867的博客 786

mybatis 批量删除_面试的朋友听我说,18个MyBatis高频知识及学习笔记,双手奉上!...

01 18个MyBatis高频知识点(含解析)精讲#{}和${}的区别是什么?数据库链接中断如何处理?在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?事务执行过程中宕机的应对处理方式?高性能服务器端端开发底层主要靠I/O复用来处理,这种模式:Mybatis中的Dao接口和XML文件里的SQL是如何建立关系的?当实体类中的属性名和表中的字段名不一样,怎么办 ?模糊查询like语句该怎么写...

weixin_39987985的博客 96

覆盖所有面试知识点,阿里内部高频Java岗面试手册带答案,SpringCloud微服务详解

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

2401_84024148的博客 703

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

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

gadiaola的博客 1217
上一篇: 想进BAT?你先看看这81题面试,来测试一下你的命中率
下一篇: Spring Boot 集成Redisson实现分布式锁
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值