网站首页 > 博客文章 正文
- 前言
- 1.什么是MyBatis?
- 2.MyBatis的优缺点是什么?
- 3.MyBatis中#{}和${}的区别是什么?
- 4.MyBatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
- 5.MyBatis是如何进行分页的?分页插件的原理是什么?
- 6.MyBatis的一级、二级缓存是什么?
- 7.MyBatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
- 8.MyBatis动态SQL有什么用?执行原理是什么?有哪些动态SQL?
- 9.使用MyBatis的mapper接口调用时有哪些要求?
- 10.MyBatis是如何解决实体类中的属性名和表中的字段名不一样的问题?
- 结尾
前言
最近互联网大环境不好,到处裁员,到处求职,一个岗位的投率都是上百,本文列举一些常见的MyBatis面试题,希望能帮助到正在面试的后端开发。
1.什么是MyBatis?
MyBatis是一个优秀的持久层框架,它内部封装了JDBC,使得开发者可以直接编写原生态SQL语句,从而严格控制SQL执行性能,灵活性高。
2.MyBatis的优缺点是什么?
优点:简单易学、灵活、提供XML标签,支持编写动态SQL、提供映射标签,支持对象与数据库的ORM字段关系映射等。 缺点:SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
3.MyBatis中#{}和${}的区别是什么?
#{}是预编译处理,{}是字符串替换。#{}预编译参数,可以防止SQL注入,{}不能防止SQL注入。#{}更加安全,通常在编写SQL语句时使用#{}来绑定参数。
4.MyBatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
不可以。在同一个命名空间中,id必须是唯一的,这是为了避免混淆和冲突。
5.MyBatis是如何进行分页的?分页插件的原理是什么?
MyBatis可以使用RowBounds对象进行分页,也可以通过编写分页SQL或使用分页插件(如PageHelper)实现分页。分页插件的原理通常是通过拦截SQL语句,在SQL语句后添加分页相关的SQL片段来实现分页功能。
6.MyBatis的一级、二级缓存是什么?
一级缓存是SqlSession级别的缓存,也称为本地缓存,它是默认开启的。一级缓存的作用域是一个SqlSession,当多个Mapper的同一个SqlSession进行相同的查询时,这些查询会共享一级缓存中的数据。二级缓存是Mapper级别的缓存,它是多个SqlSession共享的缓存,作用域是mapper的同一个namespace。二级缓存可以跨SqlSession使用,当多个SqlSession进行相同的查询时,这些查询会共享二级缓存中的数据。
7.MyBatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
MyBatis通过XML或注解配置的方式定义SQL语句,并将SQL执行结果映射为Java对象。映射形式主要包括resultType和resultMap两种。resultType直接指定返回类型,MyBatis会自动将结果集中的列名映射到Java对象的属性名。而resultMap则需要手动配置列名和属性名的映射关系,它提供了更灵活的映射方式。
8.MyBatis动态SQL有什么用?执行原理是什么?有哪些动态SQL?
MyBatis动态SQL可以根据不同的条件动态生成SQL语句,提高了SQL语句的灵活性和复用性。其执行原理是通过MyBatis提供的标签(如if、choose、when、otherwise、trim、where、set等)在XML文件中编写动态SQL语句,然后在运行时根据参数的值动态解析这些标签并生成最终的SQL语句。
9.使用MyBatis的mapper接口调用时有哪些要求?
Mapper接口方法名和XML中定义的statement的id相同;Mapper接口方法的输入参数类型和xml中定义的statement的parameterType的类型相同;Mapper接口方法的返回类型要和xml中定义的statement的resultType的类型相同(或者是resultMap)。
10.MyBatis是如何解决实体类中的属性名和表中的字段名不一样的问题?
MyBatis提供了resultMap元素来解决这个问题。通过resultMap,你可以明确指定Java对象属性与数据库字段之间的映射关系。
结尾
这些只是MyBatis面试中的一部分常见问题,实际面试中可能还会根据应聘者的经验和技能水平提出更深入的问题。准备面试时,建议深入理解MyBatis的核心概念和原理,并熟悉其常见的使用方式和最佳实践。希望能帮助到正在找工作的后端同学。如果有问题,欢迎随时交流。
猜你喜欢
- 2024-09-26 PageHelper在SpringBoot的@PostConstruct中不生效
- 2024-09-26 pageHelper-v4.2源码阅读-分页是怎么实现运行的?
- 2024-09-26 面试官:精通 Mybatis?请回答下这几个问题(二)
- 2024-09-26 Mybatis分页插件-PageHelper(mybatis分页插件的缺点)
- 2024-09-26 Mybatis面试题(mybatis面试题csdn)
- 2024-09-26 MyBatis源码分享篇---Plugin插件原理
- 2024-09-26 网易工程师推荐的开源神器,一键解决Mybatis分页问题
- 2024-09-26 PageHelper循环依赖的处理(循环依赖aop)
- 2024-09-26 Spring AOP 实现动态数据源(读写分离),底层原理是什么
- 2024-09-26 服务器端开发-经典面试题(服务器端测试面试题)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)