Java面试题(每天10题)-------连载(47)

目录

Mybatis篇

1、#{}和${}的区别

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

3、Mybatis是如何让进行分页的?分页插件的原理是什么?

4、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有那些映射形式?

5、Xml映射文件中,处理常见的select|insert|update|delete标签之外还有哪些标签?

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

7、一级、二级缓存 

8、Mybatis是否支持延迟加载?如果支持,实现原理是什么?

9、Mybatis映射文件中,如果A变迁通过include引用了B标签的内容,请问,B标签是否定义在A标签的后面,还是说必须定义在A标签的前面?

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


Mybatis篇

1、#{}和${}的区别

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

2、通常一个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 对象。

你可能感兴趣的:(java,开发语言)