面试题-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 ...
随机推荐
- 基于AT89C51的数字时钟课程设计
摘要:单片微型计算机简称单片机,又称为微控制器,是将CPU.RAM.ROM.定时/计数器.I/O接口电路集成到一块电路芯片上构成的微型计算机.本次设计的系统由单片机系统.数码管显示系统.键盘.蜂鸣器等 ...
- pdf文件内容分析工具简介(研究pdf标准好帮手)
前言:PDF文件标准诞生于20年前,从今天的视角来看,标准设计理念有些过时了:然而,pdf文件生态已经形成,尾大不掉吧.纵然有各种缺点,但是不可否认的事实:pdf是当今应用最广泛的版式文件. pdf文 ...
- CDS标准视图:分配到任务清单的维护包数据 I_PckgTaskListOpalLocData
视图名称:分配到任务清单的维护包数据 I_PckgTaskListOpalLocData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IPCKTLO ...
- 2020年最新版区块链面试题1-copy
1. 什么是区块链? 回答:区块链是不间断的经济交易数字分类帐,可以进行编程,以记录不仅是金融交易,还可以记录几乎所有有价值的东西.简单来说,它是一个不可变记录的分散式分布式数据库,该数据库由计算机集 ...
- Quartz调度框架详解、运用场景、与集群部署实践
以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...
- 史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等
Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. ...
- 边缘计算与MEC浅谈
本文分享自天翼云开发者社区<边缘计算与MEC浅谈>,作者:y****n 一.什么是边缘计算 边缘计算是在靠近物或数据源头的网络边缘侧,通过融合网络.计算.存储.应用核心能力的分布式开放平台 ...
- HPC中常见的调度器介绍
本文分享自天翼云开发者社区<HPC中常见的调度器介绍> 作者:土豆炒肉丝 在高性能计算(HPC)环境中,调度器是负责管理和分配计算资源(如计算节点.处理器核心.内存等)给待执行任务的重要组 ...
- Linux使用堡垒机
一.linux系统使用 1. 安装 puttygen sudo apt-get install putty 2. 进入 pem 所在文件执行转换命令 puttygen mykey.pem -o myk ...
- ClickHouse 常用语句
一.常用操作 1.建数据库 连接数据库:clickhouse-client -h 10.0.0.0 --port 9000 -u test_user --password test_password ...