MyBatis二 MyBatis常见面试题

一 MyBatis是什么?

MyBatis是一款优秀的持久层框架,一个半ORM (对象关系映射)框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生类型接口和Java的POIO (Plain Old Java Objects,普通老式lava对象)为数据库中的记录。

二 ORM是什么

ORM (Object Relational Mapping) ,对象关系映射,是一种为了解决关系型数据库数据与简单Java对象(POIO)的映射关系的技术。简单的说, ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。

三 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。

而Mybatis在查询关联对象或关联集合对象时,需要手动编写sq来完成,所以,称之为半自动ORM映射工具。

四 传统JDBC开发存在的问题

  • 频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这个问题。但是使用jdbc需要自己实现连接池。

  • sql语句定义、参数设置 结果集处理存在硬编码。实际项目中sql语句变化的可能性较大,一旦发生变化,需要修改java代码,系统需要重新编译,重新发布。不好维护。

  • 使用preparedstatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

  • 结果集处理存在重复代码,处理麻烦。如果可以映射成Java对象会比较方便。

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

  1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题.
    解决:在mybatis-config.xml中配置数据链接池,使用连接池管理数据库连接
  2. Sq语句写在代码中造成代码不易维护,实际应用sq变化的可能较大,sq|变动需要改变java代码。
    解决:将Sq句配置在××××mappe.×ml文件中与java代码分离。
  3. 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
    解决:Mybatis自动将java对映射至sql语句。
  4. 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要谝历,如果能将数据库记录封装成pojo对象解析比蛟方便。
    解决:Mybatisä动将sql执行结果映射至java对象

六 Mybatis优缺点

优点
与传统的数据库访问技术相比,ORM有以下优点.

  • 基于SQL语句编程.相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在xml里,解除sq|与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用
  • 与JDBC比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接
  • 很好的与各种数厍兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数啹库MyBatis都支持)
  • 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护
  • 能够与Spring很好的集成

缺点

  • SQL语句的编写工作量较大,尤其当字段多、关朕表多时,对开发人员编写SQL语句的功底有一定要求
  • SQL不能随意更换数据库

七 MyBatis框架适用场景

  • MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案
  • 对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

八 MyBatis编程步骤是什么样的?

在这里插入图片描述

九 请说说MyBatis的工作原理

在这里插入图片描述

十 MyBatis的功能架构是怎样的

JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
在这里插入图片描述

十一 MyBatis的框架架构设计是怎么样的

在这里插入图片描述
在这里插入图片描述

十二 为什么需要预编译

数据库管理系统(Database Management System)
在这里插入图片描述

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

在这里插入图片描述

十四 Mybatis中如何指定使用哪一种Executor执行器?

在这里插入图片描述

十五 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

在这里插入图片描述

十六 #{}和${}的区别

在这里插入图片描述

十七 模糊查询like语句该怎么写

在这里插入图片描述

十八 在mapper中如何传递多个参数

在这里插入图片描述

十九 Mybatis如何执行批量操作

在这里插入图片描述
在这里插入图片描述

二十 如何获取生成的主键

在这里插入图片描述

二十一 当实体类中的属性名和表中的字段名不一样 ,怎么办

在这里插入图片描述

二十二 Mapper 编写有哪几种方式?

在这里插入图片描述

二十三 什么是MyBatis的接口绑定?有哪些实现方式?

在这里插入图片描述

二十四 使用MyBatis的mapper接口调用时有哪些要求?

在这里插入图片描述

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

在这里插入图片描述

二十六 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

二十九 Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

三十二 Mybatis是否可以映射Enum枚举类?

在这里插入图片描述

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

在这里插入图片描述

三十四 Mybatis是如何进行分页的?分页插件的原理是什么?

在这里插入图片描述

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

在这里插入图片描述

三十六 Mybatis的一级、二级缓存

crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33417321/article/details/121480037