文章目录
- 前言
- 面试题系列文章传送门
- MyBatis面试题内容
-
- 1. 模糊查询like语句该怎么写?
- 2. MyBatis 框架适用场合?
- 3. MyBatis是如何进行分页的?分页插件的原理是什么?
- 4. Dao 接口里的方法,参数不同时,方法能重载吗?
- 5. MyBatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
- 6. Mybaits 的优缺点?
- 7. 谈谈你对MyBatis的理解?
- 8. MyBatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
- 9. #{}和${}的区别是什么?
- 10. 当实体类中的属性名和表中的字段名不一样 ,怎么办?
- 11. Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?
- 12. MyBats中的 一对一、一对多的关联查询 ?
- 13. MyBatis实现一对一有几种方式?具体怎么操作的?
- 14. MyBatis 的好处是什么?
- 15. 讲一下MyBatis的一级、二级缓存(说说MyBatis的缓存)?
- 16. Mapper 编写有哪几种方式?
- 17. MyBatis在mapper中如何传递多个参数?
- 18. MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?
- 19. Xml 映射文件中,除了常见的 select、insert、updae、delete标签之外,还有哪些标签?
- 20. 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问这个 Dao 接口的工作原理是什么,是否可以重载?
- 21. 什么是MyBatis的接口绑定?有哪些实现方式?
- 22. MyBatis如何获取自动生成的(主)键值?
- 23. 使用MyBatis的mapper接口调用时有哪些要求?
- 24. MyBatis 动态sql有什么用?执行原理?有哪些动态sql?
- 25. MyBatis是否可以映射 Enum 枚举类?
- 26. Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
- 27. MyBatis里面的动态Sql是怎么设定的?用什么语法?
- 28. 简述MyBatis的插件运行原理,以及如何编写一个插件?
- 29. 为什么说Mybatis是半自动 ORM 映射工具?它与全自动的区别在哪里?
- 30. resultType和resultMap的区别?
前言
作为应届生,处于找工作中ing。今年2月份刚刚整理出来的面试题,时间比较赶就没有按照模块分类排序了。总而言之,顺序比较乱,希望大家耐着性子 看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!
面试题系列文章传送门
MyBatis面试题内容
1. 模糊查询like语句该怎么写?
在Java代码中添加sql通配符。
在sql语句中拼接通配符,但是会引起sql注入
2. MyBatis 框架适用场合?
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。
对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
3. MyBatis是如何进行分页的?分页插件的原理是什么?
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。也可以直接编写SQL实现分页或者使用分页插件。
分页插件的原理:实现MyBatis提供的接口来实现自定义插件,然后在插件的拦截方法内拦截待执行的SQL,最后重写SQL。
4. Dao 接口里的方法,参数不同时,方法能重载吗?
Mapper 接口里的方法,是不能重载的,因为是使用全限名+方法名的保存和寻找策略。Mapper 接口的工作原理是 JDK 动态代理,Mybatis 运行时会使用 JDK动态代理为 Mapper 接口生成代理对象 proxy,代理对象会拦截接口方法,转而执行 MapperStatement 所代表的 sql,然后将 sql 执行结果返回。
5. MyBatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
使用resultMap标签,定义数据库列名和对象属性名之间的映射关系。
使用sql列的别名功能,将列的别名书写为对象属性名。
有了列名与属性名的映射关系后,MyBatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回。
6. Mybaits 的优缺点?
优点:
基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。
与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
很好的与各种数据库兼容,能够与 Spring 很好的集成;
提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
缺点:
SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
QL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
7. 谈谈你对MyBatis的理解?
MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架,它内部封装了JDBC,开发时只需要关注SQL语句本身。程序员直接编写原生态SQL,可以严格控制sql执行性能,灵活度高。
8. MyBatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
不同的Xml映射文件,如果配置了namespace,id可以重复。如果没有配置namespace&#x