美文网首页
Mybatis经典面试题总结

Mybatis经典面试题总结

作者: RainySpring | 来源:发表于2020-04-20 22:41 被阅读0次

陌上花开,可缓缓归矣

image.png

一、Mybatis 是如何进行分页的?

  1. Mybatis 使用 RowBounds 对象进行分页,也可以直接编写 sql 实现分页,也可以使用Mybatis 的分页插件。
  2. 分页插件的原理:实现 Mybatis 提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql。

二、分页插件原理,如何编写一个插件?

  1. Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、Executor 这 4 种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是
    InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
  2. 实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

三、九种动态标签?

trim/where/set/foreach/if/choose/when/otherwise/bind

四、#{}和${}的区别是什么?

  1. 其中#{}是预编译处理,${}是字符串替换。
  2. Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用PreparedStatement 的 set 方法来赋值;
  3. Mybatis 在处理{}时,就是把{}替换成变量的值。
  4. 使用#{}可以有效的防止 SQL 注入,提高系统安全性。

五、简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?

Mybatis 将所有 Xml 配置信息都封装到 All-In-One 重量级对象 Configuration 内部。在Xml 映射文件中,<parameterMap>标签会被解析为 ParameterMap 对象,其每个子元素会被解析为 ParameterMapping 对象。<resultMap>标签会被解析为 ResultMap 对象,其每个子元素会被解析为 ResultMapping 对象。每一个<select>、<insert>、<update>、<delete>标签均会被解析为 MappedStatement 对象,标签内的 sql 会被解析为 BoundSql 对象。

六、什么是 MyBatis 的接口绑定,有什么好处?

接口映射就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑定,我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可以有更加灵活的选择和设置.

七、MyBatis 实现一对一有几种方式?具体怎么操作的?

有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面配置 association 节点配置一对一的类就可以完成;嵌套查询是先查一个表,根据这个表里面的结果的外键 id,去再另外一个表里面查询数据,也是通过 association 配置,但另外一个表的
查询通过 select 属性配置。

八、Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?

能,Mybatis 不仅可以执行一对一、一对多的关联查询,还可以执行多对一,多对多的关联查询,多对一查询,其实就是一对一查询,只需要把 selectOne()修改为 selectList()即可;多对多查询,其实就是一对多查询,只需要把 selectOne()修改为 selectList()即可。关联对象查询,有两种实现方式,一种是单独发送一个 sql 去查询关联对象,赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用 join 查询,一部分列是 A 对象的属性值,另外一部分列是关联对象 B 的属性值,好处是只发一个 sql 查询,就可以把主对象和其关联对象查出来。

九、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?

不能重载,因为通过 Dao 寻找 Xml 对应的 sql 的时候全限名+方法名的保存和寻找策略。接口工作原理为 jdk 动态代理原理,运行时会为 dao 生成 proxy,代理对象会拦截接口方法,去执行对应的 sql 返回数据。

十、Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?

答:Mybatis 有三种基本的 Executor 执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。

  1. SimpleExecutor:每执行一次 update 或 select,就开启一个 Statement 对
    象,用完立刻关闭 Statement 对象。
  2. ReuseExecutor:执行 update 或 select,以 sql 作为key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map
  3. BatchExecutor:完成批处理。

相关文章

  • iOS经典面试题总结--内存管理

    iOS经典面试题总结--内存管理 iOS经典面试题总结--内存管理

  • Mybatis经典面试题总结

    陌上花开,可缓缓归矣 一、Mybatis 是如何进行分页的? Mybatis 使用 RowBounds 对象进行分...

  • mybatis面试题

    转自Mybatis常见面试题总结 - a745233700的博客 - CSDN博客1、什么是Mybatis? (1...

  • 2020年最新MyBatis面试题,看这篇就足够了

    MyBatis作为Java火热的框架,如果去面试的话,一定会被问到,所以这里总结MyBatis常见的面试题。下面的...

  • Paper Collection - InInterview

    ios 面试题 经典(比较全) 根据重点总结(总结的题还是比较多的,有答案) sunnyxx的面试题 很全的面试题目

  • JavaScript面试题整理(1)

    做面试题就是要做经典的面试题,通过这些具有代表性的面试题来学习与总结,从而掌握相同类型的题目。 对于面试题的总结与...

  • MyBatis面试题

    MyBatis面试题总结 #{}和${}的区别是什么 ${} 是 Properties ⽂件中的变量占位符,它可以...

  • 面试题问

    MyBatis 面试题1、什么是 Mybatis?2、Mybaits 的优点:3、MyBatis 框架的缺点:4、...

  • iOS 面试题收集自测

    目录 1.相关经典面试题2.相关优秀文章 1.相关经典面试题 2.相关优秀文章 iOS 面试知识总结之文章收录:h...

  • java ssm框架基础面试题

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

网友评论

      本文标题:Mybatis经典面试题总结

      本文链接:https://www.haomeiwen.com/subject/vlusihtx.html