跳槽季必须的知道的Mybatis面试题汇总(含答案)

跳槽季必须的知道的Mybatis面试题汇总(含答案)_第1张图片
file
  1. {}和${}的区别是什么?

{}是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理{}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。

  1. 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,
接口方法内的参数,就是传递给sql的参数。
Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,
举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。
在Mybatis中,每一个标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。

11、简述Mybatis的插件运行原理,以及如何编写一个插件。

Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,
为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,当然,只会拦截那些你指定需要拦截的方法。

实现Mybatis的Interceptor接口并复写intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

12、Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?

Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind。

其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。

13、Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

不同的xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;毕竟namespace不是必须的,只是最佳实践而已。

原因就是namespace+id是作为Map

14、MyBatis(IBatis)的好处是什么

ibatis把sql语句从Java源程序中独立出来, 放在单独的XML文件中编写,给程序的维护带来了很大便利。ibatis封装了底层JDBC API的调用细节,
并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。因为Ibatis需要程序员自己去编写sql语句,
程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询.

15、什么情况下用注解绑定,什么情况下用xml绑定?

当Sql语句比较简单时候,用注解绑定,

当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

16、MyBatis实现一对多有几种方式,怎么操作的?

有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配 置collection节点配置一对多的类就可以完成;

嵌套查询是先查一个表,根据这个表里面的 结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的 查询通过select节点配置。

MyBatis的面试题就分享到这里,当然你要跳槽要去面试的话,光会MyBatis的面试题,那可真的是远远远远不够的哦,所以之后也会分享更多的面试题给大家。
小编最近将收集的Java程序员进阶架构师的资料和面试题做了一些整理,免费分享给每一位学习Java的朋友,需要的可以进群:751827870。

                                                                                     ————————————end——————————————

本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的:(跳槽季必须的知道的Mybatis面试题汇总(含答案))