MyBatis二 MyBatis常见面试题
创始人
2024-03-29 23:53:24
0

一 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)
在这里插入图片描述

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...