面试题-MyBatis框架
前言
MyBatis框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮助。
系列文章:
MyBatis
"#{}"和${}的区别是什么?
- ${}属于静态文本替换,可以写在标签的属性值和sql内部
- "#{}"是sql中的参数占位符,mybatis会把它替换成?执行sql的时候会使用PreparedStatement设置参数的方法按序给问号设置值。
最佳实践中,通常⼀个 Xml 映射⽂件,都会写⼀个 Dao 接⼝与之对应,请
问,这个 Dao 接⼝的⼯作原理是什么?Dao 接⼝⾥的⽅法,参数不同时,⽅法能重
载吗?- 工作原理:JDK动态代理,运行时实时创建代理对象,在代理方法中执行SQL查询然后返回数据。
- 是否可以重载:不可以。因为mybatis是根据类的全限定名+方法名找SQL的,所以不支持重载
Mybatis 是如何进⾏分⻚的?分⻚插件的原理是什么?
MyBatis中支持逻辑分页,也支持物理分页。
- 逻辑分页:可以使用RowBounds进行逻辑分页,它是基于结果集的内存分页
- 物理分页:可以在sql语句中实现;或者使用MyBatis的分页插件。分页插件的原理是根据方言重写SQL。
我们项目在实际使用中使用的是PageHelper进行分页,PageHelper的原理其实也是实现了mybatis的插件接口,在接口中实现自己的逻辑。
Mybatis插入单条数据时,如何返回主键?
- 如果要返回自增主键
- 可以使用insert属性的useGenerateKeys和keyProperty指定对象属性即可,这里用法的底层原理就是使用select LAST_INSERT_ID();
- 可以使用标签即可,标签中使用after和select LAST_INSERT_ID();来返回自增主键
- 如果要返回非自增主键
- 可以使用标签即可,标签中使用before和select uuid();来返回主键
- 如果要返回自增主键
MyBatis批量插入时,如何返回自增主键?
和单条插入是类似的。
Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述⼀下动态 sql 的执⾏原理不?
MyBatis提供了9种动态SQL标签,动态SQL的原理主要是通过OGNL表达式计算表达式的值,根据表达式的值来动态拼接SQL。
实际项目中,我们最常用的就是where和if标签,可以用在列表的不定条件查询的SQL中;如果有批量插入,也会使用foreach标签。trim标签也可以去除多余的and和多余的逗号。
Mybatis 是如何将 sql 执⾏结果封装为⽬标对象并返回的?都有哪些映射形式?
- resultType:除了map以外,其他的情况需要保证列名和对象属性的映射正确,做法有两种:1. 修改字段别名为对象的属性名:resultType="类名";2. 不修改别名,增加一个属性
mapUnderscoreToCamelCase配合resultType="类名";使用也可以- 可以返回单个对象
- 可以返回单条数据的map,resultType="map"
- 可以返回对象集合,resultType="类名"
- 可以返回多条数据的map<Key,类名>,需要在接口中指定@MapKey("lastName")注解
- resultMap,逐一定义列名和属性名的映射关系
- resultType:除了map以外,其他的情况需要保证列名和对象属性的映射正确,做法有两种:1. 修改字段别名为对象的属性名:resultType="类名";2. 不修改别名,增加一个属性
Mybatis 能执⾏⼀对⼀、⼀对多的关联查询吗?都有哪些实现⽅式,以及它们之间的区别?
待完成...
Mybatis 是否⽀持延迟加载?如果⽀持,它的实现原理是什么?
支持,可以配置lazyLoadingEnabled=true|false来实现延迟加载。
Mybatis仅支持association和collection的延迟加载,延迟加载的原理是,当实际使用到需要延迟加载的属性时,发现为null,然后会去执行SQL把对象查询出来,然后设置属性值。
Mybatis 的 Xml 映射⽂件中,不同的 Xml 映射⽂件,id 是否可以重复?
不同的XML映射文件,如果配置了namespace,那么id可以重复,如果没有使用namespace,那么id不可以重复。原因是MyBatis把每一个sql语句保存在一个map中,map中的key就是namespace+id,如果key重复,那么就会相互覆盖。
Mybatis 映射⽂件中,如果 A 标签通过 include 引⽤了 B 标签的内容,请问,B 标签能否定义在 A 标签的后⾯,还是说必须定义在 A 标签的前⾯?
可以定义在任何地方。MyBatis解析的时候,如果发现没有B标签,那么会跳过A标签标记为未解析,等到全部解析完毕后,再重新解析一遍未解析的标签,这个时候就可以成功了。
简述 Mybatis 的 Xml 映射⽂件和 Mybatis 内部数据结构之间的映射关系?
MyBatis将所有的配置信息都保存在一个Configuration对象中。其中:
- parameterMap会被解析为ParameterMap对象,每个子元素被解析为ParameterMapping对象
- resultMap会被解析为ResultMap对象,每个子元素被解析为ResultMapping对象
- 增删改查标签被解析为MappedStatement对象
- 标签内的sql被解析为BoundSql对象
为什么说 Mybatis 是半⾃动 ORM 映射⼯具?它与全⾃动的区别在哪⾥?
待完成...
面试题-MyBatis框架的更多相关文章
- SSM(Spring + Springmvc + Mybatis)框架面试题
JAVA SSM框架基础面试题https://blog.csdn.net/qq_39031310/article/details/83050192 SSM(Spring + Springmvc + M ...
- Java开发工程师最新面试题库系列——Mybatis框架部分(附答案)
Mybatis Mybatis是什么框架? 答:持久层框架 Mybatis和ORM有什么区别? 答:ORM是对象关系映射的一种设计理念,也就是对象属性对应数据库字段,让开发人员以操作对象的方式操作数据 ...
- java面试题-常用框架
Spring Spring 是什么 一个开发框架,一个容器,主要由面向切面AOP 和依赖注入DI两个方面,外加一些工具 AOP和IOC AOP 面向切面 AOP是一种编程思想,主要是逻辑分离, 使业务 ...
- Mybatis框架的多对一关联关系(六)
一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- Hibernate框架与Mybatis框架的对比
学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...
- 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
随机推荐
- Solution Set - “如果惊蛰随梦远走”
目录 0.「UR #15」「UOJ #226」奥林匹克环城马拉松 1.「UR #22」「UOJ #682」月球铁轨 2.「NOI Simu.」箭头 3.「CF 830E」Perpetual Motio ...
- 分布式全局唯一ID解决方案详解
--------------------- ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Inn ...
- rpm与dpkg
基本介绍 "dpkg "是"Debian Packager "的简写.为 Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian ...
- 个人数据保全计划:从印象笔记迁移到joplin
前言 最近在探索各种现代化的笔记工具时,刚好用上了Joplin这款应用,尽管界面没那么好看,但开源.支持markdown.功能完善,而且还支持很多导入方法(事实上很多开源笔记都支持). 其中的导入功能 ...
- cxGrid列的OnValidate事件处理程序
procedure TForm1.cxGrid1DBTableView1AColumnPropertiesValidate(Sender: TObject; var DisplayValue: Var ...
- Delphi XE TVirtualQuery raised exception class ESQLiteError with message 'duplicate column name:dw'
使用Delphi XE7+UniDAC+TVirtualQuery开发的过程中,对已经查询到内存中的数据集TUniQuery组件,再次运用SQL语句进行查询 结果程序运行后提示错误:raised ex ...
- spring boot配置mybatis-plus
一.maven配置 <mybatis-plus.version>3.2.0</mybatis-plus.version> <mysql-connector.version ...
- 用豆包+Kimi,一分钟生成想要的PPT!
大家好!在快节奏的现代社会,时间就是金钱.对于经常需要制作PPT的朋友们来说,如何快速.高效地完成演示文稿的制作一直是个头疼的问题.今天,我要给大家介绍如何利用AI工具:豆包+kimi,让你在一分钟内 ...
- 嵌入式linux下的FTP服务器配置记录
嵌入式linux FTP服务器 一般嵌入式Linux下的FTP服务器会有什么要求呢?一般来说差不多如下所示 账号认证,需要特定用户才能访问(不一定要和登录用户挂钩) 根目录固定在一个固定的位置,且不能 ...
- Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
Deepseek卡的问题已经有几周了,还有同学没有解决这个问题? 今天就来教大家如何白嫖阿里云的Deepseek-R1满血版,新用户享受100万token额度,相当的富裕,可以随便用了.并且还配用AP ...