MyBatis二 MyBatis常见面试题

news2025/1/8 6:38:24

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postman+newman+jenkins持续集成

今天为大家带来的是postmannewmanjenkins进行API接口测试的持续集成: 一. postman测试实战 postman测试API接口是通过JavaScript脚本完成测试中的功能, 在请求发起前后实现测试操作. 常用功能: 请求前脚本(pre-request scripts)设置请求前置操作如设置变量等 请求后在tests…

UE多实例云渲染之Nginx代理

Nginx的Https代理 我们实现UE像素流时大部分使用的是http协议,但是某些时候前端由于某些功能问题需要使用https的协议(如前端调用本地摄像头)需要使用https协议。如果此时在内部使用http请求就会被block掉。其中一种简单的方案就是通过修改浏览器的安全…

SOLID设计原则

1. SRP单一职责原则 任何一个软件模块都应该有且仅有一个被修改的原因。 反例是一个类的三个方法给三个部门提供服务,而这三个方法有一些公共子方法,很有可能因为A部门的代码变更改动,导致B、C部门调用的方法出现意料之外的结果。 2. OCP开…

nginx请求转发webSocket

原由 1.我有一个socket服务,用ip访问是成功的,但是老板说用这个不行,要用nginx请求转发,转发内网地址到某个域名 2.但是我改成了指定域名后失败,因为我没有配置nginx.conf 3.接下来一起学习下,怎么在ngin…

华硕电脑怎么录屏?华硕电脑录屏功能在哪?简单实用教程来了

​有很多小伙伴对如何录制华硕电脑的屏幕知识和信息知之甚少。现在大家都想多了解一些关于华硕电脑怎么录屏的相关知识和信息。所以今天小编收集了一些关于如何录制华硕电脑屏幕的知识和信息,与大家分享。 华硕电脑怎么录屏方法一:使用Windows自带的录屏…

day45 PHP反序列化POP链构造魔术方法原生类

前言 #知识点: 1、什么是反序列化操作?-格式转换 2、为什么会出现安全漏洞?-魔术方法 3、反序列化漏洞如何发现? -对象逻辑 4、反序列化漏洞如何利用?-POP链构造 补充:反序列化利用大概分类三类 -魔…

重磅来袭!共600页,又一分牛逼的Python文档面世!

前言 本文是为了帮大家快速学习 Python 中知识点,这套资料涵盖了诸多学习内容:面试题,教材视频,实战资料,电子书籍。 相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不…

150行代码写个低配版WPS?:手把手教你实现+附完整源码

前言:通过一个简单实例来实现Java的GUI编程,对于新手较为友好,且有一定的实用性,正在学习Java的同学看过来!!包教包会,如有疑问欢迎私信询问! 目录 实例展示 一、GUI编程基本概念 …

java面向对象----抽象类 接口

目录 抽象类与抽象方法 概念 抽象类应用 接 口 概念 接口的特点: 接口应用举例 Java 8中关于接口的改进 内部类 如何声明局部内部类 局部内部类的特点 匿名内部类 总结 抽象类与抽象方法 概念 随着继承层次中一个个新子类的定义,类变得越…

机器学习之多元线性回归

1、多元线性回归模型:定义:具有多个特征的线性回归模型 多元线性回归模型,见下图: 多元线性回归总结(参数、模型、损失函数、梯度下降算法)见下图:【注意:梯度下降算法每次都是同时…

Vue2中过滤器的用法详解

目录 一、过滤器的概念 二、过滤器的使用位置 三、过滤器的分类 1、全局过滤器 2、本地过滤器 四、过滤器应用实例 1、使用过滤器实现省略号 2、使用过滤器处理时间戳 五、Vue3中已废弃过滤器 过滤器是vue中的一个特性,作用是用于对文本进行格式化的作用。…

动态与静态获取元素

🌵知识点简介 静态获取(querySelectorAll)时,选出的所有元素的数组,不会随着文档操作而改变; 动态获取(getElementById)时,选出的所有元素的数组,会随着文档的…

Paddle 点灯人 之 Tensor

Paddle 点灯人 之 Tensor 文章目录Paddle 点灯人 之 TensorPaddle点灯人介绍Tensor介绍Pytorch和Paddle的相似之处创建张量Tensor图片/文本转TensorDataLoader不需要加ToTensorPaddle中的 Tensor 的属性形状 shape数据类型(dtype)Tensor 的设备位置&…

高压放大器驱动压电器件工作原理

高压放大器在实际应用中经常会进行电容性负载驱动,对压电器件进行驱动,那么工作原理是什么呢,下面就请安泰电子来为我们讲解一下。 高压放大器是提高信号电压的装置,当负载是谐振电路或者耦合电路的时候,要求特定频率范…

Mybatis源码解析(十):一级缓存和二级缓存

Mybatis源码系列文章 手写源码(了解源码整体流程及重要组件) Mybatis源码解析(一):环境搭建 Mybatis源码解析(二):全局配置文件的解析 Mybatis源码解析(三):映射配置文件的解析 Mybatis源码解析(四):s…

转行学python?到底值不值

大学毕业后相当迷茫,不知道做些什么,于是跟着潮流去学了python,当年2w多买的python教程,三个月的时间成功上岸,现在用不着了,文末有领取方式。 面对当前情况,让众多职场人开始紧张,…

《棒球大联盟2nd》:青春赛场·棒球1号位

茂野大吾是个有着现役职业棒球选手的父亲的小学生。他因为向往曾经在棒球大联盟活跃的父亲吾郎,而开始了在少年棒球队“三船海豚队”的棒球训练。但是,因为背负着茂野二世这个称号的压力,无法发挥出原来的水平,以至于1年还不到就放…

基于java+springmvc+mybatis+jsp+mysql的整体衣柜定制系统

项目介绍 管理员后台: 功能:个人中心、客户管理、导购管理、店长管理、厂家管理 客户后台: 功能:个人中心、款式信息管理、款式预订管理、材料信息管理、材料预订管理、定制订单管理、安装信息管理、订单评价管理、联系客户管理 …

我发现了一个React、Vue等所有前端框架都存在的隐秘Bug?

什么 Bug? 昨天有个朋友请教了我一个问题,她在使用原生的 Details 元素封装一个手风琴组件。但是无论如何都不能按照预期工作。 起初我认为是她水平比较差,代码写的有问题。但是她一再向我保证绝对不是她的问题。所以我就抽出时间帮她看了一…

DP2515国产带SPI接口CAN总线控制器芯片兼容替代MCP2515/MCP2515-I/ST

目录什么是CAN?DP2515简介芯片特性参考原理图什么是CAN? CAN是控制器局域网络(Controller Area Network, CAN)的简称,是如今是国际上应用最广泛的现场总线之一,是ISO国际标准化的串行通信协议。在汽车产业中,出于对安…