首页 > 其他 > 详细

常考的Mybatis面试题及答案

时间:2020-09-11 10:02:31      阅读:119      评论:0      收藏:0      [点我收藏+]

学习java的知识很重要的一块就是框架的知识了,其中使用频率很高的是Mybatis框架。MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。今天整理了10道面试常考的Mybatis面试题及答案,下面还附有答案哦,一起往下看看吧。

1、什么是Mybatis?

答:(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程;

(2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集;

(3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中Mysql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。

2、Mybaits的优点有什么?

答:1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用;

(2)JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;

(3)很好的与各种数据库兼容;

(4)能够与Spring很好的集成;

(5)提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

3、MyBatis框架的缺点有什么?

答:(1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求;

2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

4、MyBatis框架适用场合:

1)MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案;

2)对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

5、MyBatis与Hibernate有哪些不同?

答:(1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句;

2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大;

3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。

6.#{}和${}的区别是什么?

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

7.Mybatis是如何进行分页的?分页插件的原理是什么?

答:Mybatis使用Row Bounds对象进行分页,它是针对Result Set结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

分页原理:分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

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

答:第一种是使用标签,逐一定义数据库列名和对象属性名之间的映射关系。

第二种是使用sql列的别名功能,将列的别名书写为对象属性名。有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。

9、Mybatis的编程步骤是什么样的?

答:首先创建Sql Session Factory;第二通过Sql Session Factory创建Sql Session;第三通过sqlsession执行数据库操作;其次调用session.commit()提交事务最后;调用session.close()关闭会话。

10、JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

答:(1)数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,使用数据库链接池可解决此问题。解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2)Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3)向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。解决: Mybatis 自动将 java 对象映射至 sql 语句。

4)对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo对象解析比较方便。解决:Mybatis 自动将 sql 执行结果映射至java对象。

以上的内容就是今天分享给大家的Mybatis的面试题,各位学习Mybatis 的程序员对照着答案查漏补缺一下,为面试做好准备。欢迎想学习更多知识的朋友们来看看Mybatis核心源码解析的培训课程,因为作为一名合格且优秀的java程序员,不能仅仅掌握面试题,更重要的是掌握Mybatis框架背后运行机制和底层实现,这个培训课程是java开发人员内功修炼,提升技术功底的必修课,希望通过上面的Mybatis面试题和推荐的课程可以筑牢你的知识底座和扎实的基础。

常考的Mybatis面试题及答案

原文:https://www.cnblogs.com/wkcto/p/13649816.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!