每日五道java面试题之mybatis篇(二)

在这里插入图片描述

目录:

  • 第一题. Mybatis优缺点
  • 第二题. Hibernate 和 MyBatis 的区别?
  • 第三题. MyBatis编程步骤是什么样的?
  • 第四题. 请说说MyBatis的工作原理
  • 第五题. MyBatis的功能架构是怎样的?

第一题. Mybatis优缺点

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

  • 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用
  • 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接
  • 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)
  • 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护
  • 能够与Spring很好的集成
    缺点
  • SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求
  • SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

第二题. Hibernate 和 MyBatis 的区别?

相同点
都是对jdbc的封装,都是持久层的框架,都用于dao层的开发。

不同点
映射关系
MyBatis 是一个半自动映射的框架,配置Java对象与sql语句执行结果的对应关系,多表关联关系配置简单
Hibernate 是一个全表映射的框架,配置Java对象与数据库表的对应关系,多表关联关系配置复杂
SQL优化和移植性
Hibernate 对SQL语句封装,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供 HQL(Hibernate Query Language)操作数据库,数据库无关性支持好,但会多消耗性能。如果项目需要支持多种数据库,代码开发量少,但SQL语句优化困难。

MyBatis 需要手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。开发工作量相对大些。直接使用SQL语句操作数据库,不支持数据库无关性,但sql语句优化容易。
开发难易程度和学习成本

Hibernate 是重量级框架,学习使用门槛高,适合于需求相对稳定,中小型的项目,比如:办公自动化系统

MyBatis 是轻量级框架,学习使用门槛低,适合于需求变化频繁,大型的项目,比如:互联网电子商务系统

总结
MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,
Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

第三题. MyBatis编程步骤是什么样的?

1、 创建SqlSessionFactory
2、 通过SqlSessionFactory创建SqlSession
3、 通过sqlsession执行数据库操作
4、 调用session.commit()提交事务
5、 调用session.close()关闭会话

第四题. 请说说MyBatis的工作原理

在学习 MyBatis 程序之前,需要了解一下 MyBatis 工作原理,以便于理解程序。MyBatis 的工作原理如下图
在这里插入图片描述
1)读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。
2)加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
3)构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂SqlSessionFactory。
4)创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL语句的所有方法。
5)Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
6)MappedStatement 对象:在 Executor 接口的执行方法中有一个MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。
7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对preparedStatement 对象设置参数的过程。
8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

第五题. MyBatis的功能架构是怎样的?

在这里插入图片描述
我们把Mybatis的功能架构分为三层:
API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力
在这里插入图片描述

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

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

相关文章

Leetcode 3.18

Leetcode hot100 二叉树1.路径总和 III2.路径总和 II3.二叉树的所有路径4.二叉树的最近公共祖先 回溯1.电话号码的字母组合 二叉树 1.路径总和 III 路径总和 III 思路:我们访问每一个节点 node,检测以 node 为起始节点且向下延深的路径有多少种。递归遍…

【ACL2023获奖论文】比你想的更弱:对弱监督学习的批判性审视

【ACL 2023获奖论文】主题论文奖:7.Weaker Than You Think: A Critical Look at Weakly Supervised Learning 写在最前面引言正文问题1:对WSL来说,clean data是否必要?问题2:WSL需要多少的clean data?问题3…

elasticsearch基础学习

elasticsearch简介 什么是elasticsearch elasticsearch(简称es),其核心是 Elastic Stack,es是一个基于 Apache Lucene(TM)的开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据…

如何在开放麒麟系统安装cpolar内网穿透实现公网环境下SSH远程连接

文章目录 1. 安装SSH服务2. 本地SSH连接测试3. openKylin安装Cpolar4. 配置 SSH公网地址5. 公网远程SSH连接小结 6. 固定SSH公网地址7. SSH固定地址连接 openKylin是中国首个基于Linux 的桌面操作系统开发者平台,通过开放操作系统源代码的方式,打造具有自…

裸金属租赁的意义

裸金属,这个名词听起来好“硬核”,如果对于一个新手来讲,怎么也不会将这个概念和IT行业、计算机、服务器等内容进行关联,它可能更应该是工业领域的一种产品或者物质,可真正关联到其实际概念恰恰与当前的主流行业如&…

论文阅读——Align before Fuse

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation image-text contrastive learning(ITC)用在单模态,masked language modeling (MLM) and image-text matching (ITM) 用在多模态。 单模态编码器的表示上引入了中间图像…

机器学习中的基础问题总结

介绍:总结面试经常问到的一些机器学习知识点(必会🌟) 基础知识点梳理 模型评估一、L1、L2正则化1、L1正则与L2正则有何不同?2、为什么正则化可以防止过拟合?3、为什么L1正则具有稀疏性?&#xf…

JMeter之IP欺骗技术(模拟不同的IP地址并发请求)

我们在做压力测试时,有这样的场景和需求,希望模拟的批量用户来自不同的IP地址。如果小伙伴用LR是很容易实现的,用IP欺骗即可实现。那么对于用JMeter小伙伴是不是就不能享受这一技术了呢,答案是否定的,JMeter一样可以实…

【晴问算法】入门篇—贪心算法—整数配对

题目描述 有两个正整数集合S、T,其中S中有n个正整数,T中有m个正整数。定义一次配对操作为:从两个集合中各取出一个数a和b,满足a∈S、b∈T、a≤b,配对的数不能再放回集合。问最多可以进行多少次这样的配对操作。 输入描…

Elasticsearch:调整近似 kNN 搜索

在我之前的文章 “Elasticsearch:调整搜索速度”,我详细地描述了如何调整正常的 BM25 的搜索速度。在今天的文章里,我们来进一步探讨如何提高近似 kNN 的搜索速度。希望对广大的向量搜索开发者有一些启示。 Elasticsearch 支持近似 k 最近邻…

一、yocto 编译raspberrypi 4B并启动

yocto 编译raspberrypi 4B并启动 yocto 编译raspberrypi 4B并启动环境准备代码下载编译及配置烧录 yocto 编译raspberrypi 4B并启动 本篇文章为基于raspberrypi 4B单板的yocto实战系列的开篇之作。 环境准备 最近到手一个树莓派4B,准备拿来玩一玩,下面…

Docker部署Django项目——基础

1.服务器配置 1.1centos7 系统的安装 centos-7-isos-x86_64安装包下载) VMware安装自定义配置 选择对应的系统镜像 一般选择内核4核、内存8g、硬盘80g 相关配置 1.2.网络配置 1.2.1查看win电脑虚拟机VMnet8的ip 使用ipconfig查看虚拟机的ip 1.2.2配置虚拟机VMnet8的ip…

152.乐理基础-广义的、实际的原位与转位、转位的意义

内容参考于:三分钟音乐社 上一个内容:151.和弦固定标记法(二)转位和弦,斜杠(slash)和弦 上一个内容里练习的答案:斜杠左边的有多个写法,如果与下图不一样,那…

小白向-使用git实现不同服务器改动的同步

背景 深度学习项目,已有可运行的backbone,已将此项目在github建库。 需要使用不同分支进行不同改动的测试;有两台服务器可供程序运行; 项目需求 以github云端仓库为媒介,实现不同服务器改动无痛关联。维护项目代码…

WRF模型安装教程(ububtu系统)-- III.WRF和WPS模型的安装

六、WRF模型的安装 # 进入Build_WRF文件夹 cd Build_WRF # 下载WRFV3.9.1 wget https://www2.mmm.ucar.edu/wrf/src/WRFV4.0.TAR.gz # 解压WRF安装包并进入 tar -zxvf WRFV4.0.TAR.gz cd WRF # 安装WRF ./configure 出现如下选项: 选择34, 这里是让你选…

FREERTOS任务调度和切换

我们已经学会了 FreeRTOS 的任务创建和删除,挂起和恢复等基本操作,并且也学习了分析FreeRTOS 源码所必须掌握的知识:列表和列表项。但是任务究竟如何被创建、删除、挂起和恢复的?系统是怎么启动的等等这些我们还不了解&#xff0c…

windows使用docker运行TP6使用swoole内置http服务

1,下载docker-Windows客户端 下载地址:https://www.docker.com/products/docker-desktop docker --version #查看docker版本 docker-compose --version #查看docker-compose版本 2,安装环境 使用一键安装包:https://gitee.com/yes…

汇总全网免费API,持续更新(新闻api、每日一言api、音乐。。。)

Public&FreeAPI 网址:apis.whyta.cn (推荐) UomgAPI 网址:https://api.uomg.com 教书先生 网址:https://api.oioweb.cn/ 山海API https://api.shserve.cn/ 云析API铺 https://api.a20safe.com/ 韩小韩…

深度学习pytorch——基本数据类型创建Tensor(持续更新)

声明:本深度学习笔记基于课时18 索引与切片-1_哔哩哔哩_bilibili学习而来 All is about Tensor 定义:Tensors are simply mathematical objects that can be used to describe physical properties, just like scalars and vectors. In fact tensors a…

day6 3/18

2.试编程: 封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪 再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数(整…