前言

MyBatis框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮助。

系列文章:

面试题-Java基础

面试题-Java集合

面试题-Java多线程基础、实现工具和可见性保证

面试题-线程池和原子变量

面试题-Java虚拟机

面试题-计算机网络1

面试题-计算机网络-HTTP部分


MyBatis

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

    • ${}属于静态文本替换,可以写在标签的属性值和sql内部
    • "#{}"是sql中的参数占位符,mybatis会把它替换成?执行sql的时候会使用PreparedStatement设置参数的方法按序给问号设置值。
  2. 最佳实践中,通常⼀个 Xml 映射⽂件,都会写⼀个 Dao 接⼝与之对应,请

    问,这个 Dao 接⼝的⼯作原理是什么?Dao 接⼝⾥的⽅法,参数不同时,⽅法能重

    载吗?

    • 工作原理:JDK动态代理,运行时实时创建代理对象,在代理方法中执行SQL查询然后返回数据。
    • 是否可以重载:不可以。因为mybatis是根据类的全限定名+方法名找SQL的,所以不支持重载
  3. Mybatis 是如何进⾏分⻚的?分⻚插件的原理是什么?

    MyBatis中支持逻辑分页,也支持物理分页。

    • 逻辑分页:可以使用RowBounds进行逻辑分页,它是基于结果集的内存分页
    • 物理分页:可以在sql语句中实现;或者使用MyBatis的分页插件。分页插件的原理是根据方言重写SQL。

    我们项目在实际使用中使用的是PageHelper进行分页,PageHelper的原理其实也是实现了mybatis的插件接口,在接口中实现自己的逻辑。

  4. Mybatis插入单条数据时,如何返回主键?

    • 如果要返回自增主键

      • 可以使用insert属性的useGenerateKeys和keyProperty指定对象属性即可,这里用法的底层原理就是使用select LAST_INSERT_ID();
      • 可以使用标签即可,标签中使用after和select LAST_INSERT_ID();来返回自增主键
    • 如果要返回非自增主键
      • 可以使用标签即可,标签中使用before和select uuid();来返回主键
  5. MyBatis批量插入时,如何返回自增主键?

    和单条插入是类似的。

  6. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述⼀下动态 sql 的执⾏原理不?

    MyBatis提供了9种动态SQL标签,动态SQL的原理主要是通过OGNL表达式计算表达式的值,根据表达式的值来动态拼接SQL。

    实际项目中,我们最常用的就是where和if标签,可以用在列表的不定条件查询的SQL中;如果有批量插入,也会使用foreach标签。trim标签也可以去除多余的and和多余的逗号。

  7. Mybatis 是如何将 sql 执⾏结果封装为⽬标对象并返回的?都有哪些映射形式?

    • resultType:除了map以外,其他的情况需要保证列名和对象属性的映射正确,做法有两种:1. 修改字段别名为对象的属性名:resultType="类名";2. 不修改别名,增加一个属性 mapUnderscoreToCamelCase 配合resultType="类名";使用也可以

      • 可以返回单个对象
      • 可以返回单条数据的map,resultType="map"
      • 可以返回对象集合,resultType="类名"
      • 可以返回多条数据的map<Key,类名>,需要在接口中指定@MapKey("lastName")注解
    • resultMap,逐一定义列名和属性名的映射关系
  8. Mybatis 能执⾏⼀对⼀、⼀对多的关联查询吗?都有哪些实现⽅式,以及它们之间的区别?

    待完成...

  9. Mybatis 是否⽀持延迟加载?如果⽀持,它的实现原理是什么?

    支持,可以配置lazyLoadingEnabled=true|false来实现延迟加载。

    Mybatis仅支持association和collection的延迟加载,延迟加载的原理是,当实际使用到需要延迟加载的属性时,发现为null,然后会去执行SQL把对象查询出来,然后设置属性值。

  10. Mybatis 的 Xml 映射⽂件中,不同的 Xml 映射⽂件,id 是否可以重复?

    不同的XML映射文件,如果配置了namespace,那么id可以重复,如果没有使用namespace,那么id不可以重复。原因是MyBatis把每一个sql语句保存在一个map中,map中的key就是namespace+id,如果key重复,那么就会相互覆盖。

  11. Mybatis 映射⽂件中,如果 A 标签通过 include 引⽤了 B 标签的内容,请问,B 标签能否定义在 A 标签的后⾯,还是说必须定义在 A 标签的前⾯?

    可以定义在任何地方。MyBatis解析的时候,如果发现没有B标签,那么会跳过A标签标记为未解析,等到全部解析完毕后,再重新解析一遍未解析的标签,这个时候就可以成功了。

  12. 简述 Mybatis 的 Xml 映射⽂件和 Mybatis 内部数据结构之间的映射关系?

    MyBatis将所有的配置信息都保存在一个Configuration对象中。其中:

    • parameterMap会被解析为ParameterMap对象,每个子元素被解析为ParameterMapping对象
    • resultMap会被解析为ResultMap对象,每个子元素被解析为ResultMapping对象
    • 增删改查标签被解析为MappedStatement对象
    • 标签内的sql被解析为BoundSql对象
  13. 为什么说 Mybatis 是半⾃动 ORM 映射⼯具?它与全⾃动的区别在哪⾥?

    待完成...

面试题-MyBatis框架的更多相关文章

  1. SSM(Spring + Springmvc + Mybatis)框架面试题

    JAVA SSM框架基础面试题https://blog.csdn.net/qq_39031310/article/details/83050192 SSM(Spring + Springmvc + M ...

  2. Java开发工程师最新面试题库系列——Mybatis框架部分(附答案)

    Mybatis Mybatis是什么框架? 答:持久层框架 Mybatis和ORM有什么区别? 答:ORM是对象关系映射的一种设计理念,也就是对象属性对应数据库字段,让开发人员以操作对象的方式操作数据 ...

  3. java面试题-常用框架

    Spring Spring 是什么 一个开发框架,一个容器,主要由面向切面AOP 和依赖注入DI两个方面,外加一些工具 AOP和IOC AOP 面向切面 AOP是一种编程思想,主要是逻辑分离, 使业务 ...

  4. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  5. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  6. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  7. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  8. 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

    此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...

  9. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  10. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

随机推荐

  1. Solution Set - “如果惊蛰随梦远走”

    目录 0.「UR #15」「UOJ #226」奥林匹克环城马拉松 1.「UR #22」「UOJ #682」月球铁轨 2.「NOI Simu.」箭头 3.「CF 830E」Perpetual Motio ...

  2. 分布式全局唯一ID解决方案详解

    --------------------- ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Inn ...

  3. rpm与dpkg

    基本介绍 "dpkg "是"Debian Packager "的简写.为 Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian ...

  4. 个人数据保全计划:从印象笔记迁移到joplin

    前言 最近在探索各种现代化的笔记工具时,刚好用上了Joplin这款应用,尽管界面没那么好看,但开源.支持markdown.功能完善,而且还支持很多导入方法(事实上很多开源笔记都支持). 其中的导入功能 ...

  5. cxGrid列的OnValidate事件处理程序

    procedure TForm1.cxGrid1DBTableView1AColumnPropertiesValidate(Sender: TObject; var DisplayValue: Var ...

  6. Delphi XE TVirtualQuery raised exception class ESQLiteError with message 'duplicate column name:dw'

    使用Delphi XE7+UniDAC+TVirtualQuery开发的过程中,对已经查询到内存中的数据集TUniQuery组件,再次运用SQL语句进行查询 结果程序运行后提示错误:raised ex ...

  7. spring boot配置mybatis-plus

    一.maven配置 <mybatis-plus.version>3.2.0</mybatis-plus.version> <mysql-connector.version ...

  8. 用豆包+Kimi,一分钟生成想要的PPT!

    大家好!在快节奏的现代社会,时间就是金钱.对于经常需要制作PPT的朋友们来说,如何快速.高效地完成演示文稿的制作一直是个头疼的问题.今天,我要给大家介绍如何利用AI工具:豆包+kimi,让你在一分钟内 ...

  9. 嵌入式linux下的FTP服务器配置记录

    嵌入式linux FTP服务器 一般嵌入式Linux下的FTP服务器会有什么要求呢?一般来说差不多如下所示 账号认证,需要特定用户才能访问(不一定要和登录用户挂钩) 根目录固定在一个固定的位置,且不能 ...

  10. Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版

    Deepseek卡的问题已经有几周了,还有同学没有解决这个问题? 今天就来教大家如何白嫖阿里云的Deepseek-R1满血版,新用户享受100万token额度,相当的富裕,可以随便用了.并且还配用AP ...