MyBatis面试题--(底层原理与基本概念)

news/2024/11/14 19:29:58/文章来源:https://www.cnblogs.com/yangcurry/p/18546618

目录
  • 什么是Mybatis?MyBatis的好处是什么?
  • 什么是ORM?有何作用?
  • MyBatis中的SqlSession是什么?有什么作用?
    • 1>什么是 SqlSession
    • 2>SqlSession 的作用
  • 解释一下 SqlSessionFactory 的作用并解释它如何使用
    • SqlSessionFactory的作用?
    • 如何使用SqlSessionFactory
      • 1. 添加依赖
      • 2. 配置数据源和SqlSessionFactory
      • 3. 创建Mapper接口
      • 4. 编写Mapper XML文件
      • 5. 使用SqlSessionFactory

什么是Mybatis?MyBatis的好处是什么?

MyBatis 是三层架构中的持久层框架,它提供了一个简单的方法来将 Java 对象与数据库中的记录进行映射。MyBatis 通过使用 XML 或注解来描述对象和数据库中记录之间的映射关系,使得开发者可以编写 SQL 语句来直接与数据库交互。提供半自动的ORM实现,简化JDBC流程

MyBatis 的好处包括:

  1. 简洁的 API 和灵活的配置
    MyBatis 提供了一个相对简单的 API,使得数据库操作变得直观。同时,它允许通过 XML 或注解来配置 SQL 语句,提供了高度的灵活性。

  2. 直接控制 SQL
    开发者可以直接编写 SQL 语句,这意味着可以充分利用数据库的特性,如存储过程、复杂的连接等。

  3. 减少 JDBC 代码的冗余
    使用 MyBatis 可以减少大量的 JDBC 模板代码,如打开连接、关闭连接、处理异常等,从而让开发者专注于 SQL 语句的编写。

  4. 映射灵活性
    MyBatis 支持多种类型的结果映射,包括一对一、一对多、多对多等复杂的映射关系。

  5. 优化和定制
    由于 SQL 语句是直接写在 XML 或注解中的,开发者可以根据需要对 SQL 进行优化和定制。

  6. 事务管理
    MyBatis 支持声明式事务管理,可以很容易地与 Spring 集成,利用 Spring 的事务管理功能。

  7. 动态 SQL
    MyBatis 提供了强大的动态 SQL 功能,可以根据条件动态构建 SQL 语句,如 <if><choose><when><otherwise> 等。

  8. 缓存机制
    MyBatis 提供了一级缓存和二级缓存,可以减少数据库的访问次数,提高应用性能。

  9. 与 Spring 框架的集成
    MyBatis 可以与 Spring 框架无缝集成,利用 Spring 的依赖注入、事务管理等特性,简化开发流程。

  10. 社区支持
    MyBatis 拥有一个活跃的社区,提供了大量的文档和资源,方便开发者学习和解决问题。

MyBatis 的这些优点使其成为了许多 Java 项目中持久层的首选解决方案之一。

什么是ORM?有何作用?

ORM 是“Object-Relational Mapping”(对象关系映射)的缩写,这是一种编程技术,用于在关系数据库(如 MySQL、PostgreSQL、Oracle 等)和对象程序语言(如 Java、C#、Python 等)之间转换数据。ORM 框架允许开发者使用面向对象的方式来操作数据库,而不是编写 SQL 语句。

简单来说ORM就是一个联系对象与关系数据库的桥梁

ORM 的主要作用包括:

  1. 抽象数据库操作
    ORM 提供了一个抽象层,允许开发者在不编写 SQL 的情况下与数据库交互。这意味着你可以使用面向对象的方法来查询和操作数据库,例如通过创建和操作对象,而不是直接编写 SQL 语句。

  2. 减少样板代码
    ORM 可以减少与数据库交互所需的大量样板代码(boilerplate code),如打开和关闭连接、处理 SQL 语句和结果集等。

  3. 提高开发效率
    由于 ORM 提供了更高层次的抽象,开发者可以更快地开发应用程序,因为他们可以专注于业务逻辑而不是数据库操作的细节。

  4. 数据访问的一致性
    ORM 允许在整个应用程序中使用一致的方式来访问数据,这有助于保持代码的整洁和一致性。

  5. 数据库无关性
    ORM 框架通常提供数据库无关性,这意味着你可以在不同的数据库系统之间切换,而不需要对代码进行大量修改。

  6. 对象和数据库之间的映射
    ORM 框架自动将数据库表映射到对象,将行映射到对象的属性,将表之间的关联映射到对象之间的关系。

  7. 事务管理
    ORM 框架通常提供事务管理功能,使得在对象层面上管理事务变得更加容易。

  8. 缓存机制
    一些 ORM 框架提供了查询结果的缓存机制,可以提高应用程序的性能。

  9. 动态查询和报告
    ORM 允许开发者构建复杂的查询和报告,而不需要深入了解底层的 SQL 语法。

  10. 安全性
    ORM 通过参数化查询和自动转义输入,有助于减少 SQL 注入等安全风险。

流行的 ORM 框架包括 Hibernate(Java)、Entity Framework(C#)、Django ORM(Python)和 Sequelize(JavaScript)。每个框架都有其特定的特性和优势,但它们的核心目标都是简化数据库操作和提高开发效率。

MyBatis中的SqlSession是什么?有什么作用?

为什么要了解sqlSession,当我们在使用MyBatis框架的时候,经常会看到sqlSession的报错,所以我们应该了解一下sqlSession

MyBatis 是一个流行的持久层框架,它提供了一个简单而强大的接口来访问数据库。在 MyBatis 中,SqlSession 是一个非常重要的组件,它代表了与数据库的一次会话,是执行持久化操作的主要通道。

1>什么是 SqlSession

SqlSession 是 MyBatis 中的一个核心接口,它提供了执行映射 SQL 语句的方法。每个 SqlSession 实例在生命周期内都代表一个数据库会话,并且是线程不安全的,应该在方法执行完毕后关闭。

2>SqlSession 的作用

  1. 执行 SQL 语句
    SqlSession 提供了多种方法来执行 SQL 语句,包括查询(selectOneselectList 等)、插入(insert)、更新(update)和删除(delete)操作。

  2. 提交事务
    在 MyBatis 中,默认情况下,每个 SqlSession 都是自动提交事务的。但是,你可以通过获取 SqlSession 的事务管理器来手动控制事务的提交和回滚。
    (说白了,sqlSession是我们能够使用MyBatis的关键,因为事务的提交与否决定了mybatis对数据库的操作成功与否)

  3. 获取映射器
    SqlSession 可以用来获取 Mapper 接口的实例,这些 Mapper 接口定义了数据库操作的方法。通过 SqlSession,你可以执行这些 Mapper 方法对应的 SQL 语句。

  4. 管理事务
    SqlSession 允许你管理数据库事务。你可以在 SqlSession 的作用域内执行多个数据库操作,并在所有操作完成后一起提交或在遇到异常时回滚。

  5. 关闭资源
    SqlSession 不再需要时,应该关闭它以释放数据库资源。这通常在 try-finally 块中完成,以确保即使发生异常也能释放资源。

  6. 获取数据库元数据
    SqlSession 可以提供关于数据库操作的元数据,例如插入操作生成的自动递增的主键值。

  7. 批量操作
    SqlSession 支持批量执行 SQL 语句,这对于执行大量数据库操作时提高性能非常有用。

  8. 灵活的缓存策略
    SqlSession 提供了一级缓存,可以减少对数据库的查询次数,提高查询效率。

使用示例

try (SqlSession session = sqlSessionFactory.openSession()) {// 获取 Mapper 接口实例BlogMapper mapper = session.getMapper(BlogMapper.class);// 执行查询Blog blog = mapper.selectBlogById(blogId);// 提交事务session.commit();
} catch (Exception e) {// 回滚事务session.rollback();throw e;
} finally {// 关闭 SqlSessionsession.close();
}

在上述示例中,SqlSession 被用于获取 BlogMapper 实例,执行查询,并在操作完成后提交事务。如果发生异常,则回滚事务,并在 finally 块中关闭 SqlSession

总之,SqlSession 是 MyBatis 中执行数据库操作的核心接口,它提供了执行 SQL 语句、管理事务和获取数据库操作结果的功能。正确使用 SqlSession 对于确保数据的一致性和资源的有效管理至关重要。

解释一下 SqlSessionFactory 的作用并解释它如何使用

在MyBatis中,SqlSessionFactory是一个非常重要的组件,它负责创建SqlSession实例。SqlSession提供了操作数据库的方法,如执行SQL语句、提交或回滚事务以及管理映射器(Mapper)接口。因此,SqlSessionFactory在MyBatis中扮演着连接应用程序和数据库的桥梁角色。

SqlSessionFactory的作用?

  1. 创建SqlSession
    SqlSessionFactory的主要作用是创建SqlSession实例。每个SqlSession实例都是线程安全的,并且可以用来执行SQL操作。

  2. 配置MyBatis
    它包含了MyBatis的配置信息,如数据库连接池、事务管理器、映射器位置等。

  3. 提供数据库操作
    通过创建的SqlSession,可以执行数据库操作,如查询、插入、更新和删除。

如何使用SqlSessionFactory

在Spring Boot项目中,SqlSessionFactory通常是自动配置的,但您也可以自定义配置。以下是使用SqlSessionFactory的基本步骤:

1. 添加依赖

确保您的项目中添加了MyBatis和数据库驱动的依赖。例如,对于Maven项目,您需要在pom.xml中添加:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>最新版本</version>
</dependency>
<dependency><groupId>数据库驱动的groupId</groupId><artifactId>数据库驱动的artifactId</artifactId><version>数据库驱动的版本</version>
</dependency>
2. 配置数据源和SqlSessionFactory

在Spring Boot的配置文件(如application.propertiesapplication.yml)中配置数据源和MyBatis相关属性:

# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名
spring.datasource.username=用户名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true
3. 创建Mapper接口

定义一个Mapper接口来操作数据库:

public interface UserMapper {User selectUserById(int id);// 其他数据库操作方法
}
4. 编写Mapper XML文件

为Mapper接口编写对应的XML映射文件,定义SQL语句:

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><select id="selectUserById" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select><!-- 其他SQL映射 -->
</mapper>
5. 使用SqlSessionFactory

在Spring Boot中,SqlSessionFactory通常是自动配置的,您可以直接注入并使用它:

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {private final SqlSessionFactory sqlSessionFactory;@Autowiredpublic UserService(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}public User getUserById(int id) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);return mapper.selectUserById(id);}}
}
  UserMapper mapper = session.getMapper(UserMapper.class);return mapper.selectUserById(id);}
}
在这个例子中,`SqlSessionFactory`用于创建`SqlSession`,然后通过`SqlSession`获取`UserMapper`实例,并调用其方法来执行数据库操作。**总结**`SqlSessionFactory`是MyBatis中用于创建`SqlSession`的工厂类,它封装了MyBatis的配置信息。在Spring Boot中,`SqlSessionFactory`通常是自动配置的,您可以通过注入它来创建`SqlSession`并执行数据库操作。通过定义Mapper接口和XML映射文件,您可以清晰地管理数据库操作。

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

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

相关文章

centOS7 docker 安装步骤

一、安装前检查工作: 1.检查/etc/yum.repos.d/CentOS-Base.repo文件是否存在,如果不存在,从网络仓库中复制一份新的 CentOS-Base.repo 文件。 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 或者使用 wget: sudo wget -O /…

k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储

目录docker registry 部署生成 htpasswd 文件生成 secret 文件生成 registry 配置文件创建 service创建 statefulset创建 ingress验证 docker registrydocker registry 监控docker registry uidocker registry dockerfile docker registry 配置文件 S3 storage driver registry…

[68] (炼石计划) NOIP 模拟赛 #20

学了一个挺帅的 MerMaid 所以用一下 flowchart TBA(邻间的骰子之舞)style A color:#ffffff,fill:#00c0c0,stroke:#ffffff 考虑每次复制以后一定会粘贴若干次(大于零,否则没有意义),因此将复制粘贴捆绑起来考虑,设复制后连续粘贴了 \(m\) 次,则代价为 \(x+my\),贡献为让编…

团队项目Scrum冲刺-day4

一、每天举行站立式会议 站立式会议照片一张昨天已完成的工作成员 任务陈国金 用户模块接口开发凌枫 整合MD编辑器陈卓恒 完成管理题目页面谭立业 完成题目搜索页面廖俊龙 接口测试曾平凡 前端页面测试曾俊涛 完成题目模块接口开发薛秋昊 完成题目提交模块接口开发今天计划完成…

【闲话】先觉

题图太大了,遂放到里面了能 窥探 到未来的 命运 又怎样? 不愿向 命运 屈服,自以为一次次地“战胜” 命运 后却不知一切都是 命运 早就 安排 好的。亦或是他即是 命运 的代理人。 不久后的 毁灭 已成为他的梦魇,面对好友的一个个离去他 无能为力 ,只好请求 那位大人 伸出援…

团队作业4——项目冲刺-4

团队作业4——项目冲刺-4信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 在七天敏捷冲刺中,完成工大严选开发,记录每日进展和问题,更新燃尽图、签入代码,并发布集合日志总结成果GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗…

MX 2025--炼石计划 NOIP 模拟赛 #20

斥责打得抽象。T3,T4放俩难的板子。由于是MX的题,就不放题意了。 邻间的骰子之舞 发现复制操作不会超过\(64\)次,而粘贴操作肯定是越均匀越好,直接二分暴力跑就行了。点此查看代码 #include<bits/stdc++.h> using namespace std; #define rep(i,s,t,p) for(int i = s;…

EBS:物料搬运单查看人限制(创建人栏位)

EBS:物料搬运单查看人限制(创建人栏位)Applies to:Oracle Inventory Management - Version: 11.5.9 to 12.0.0 - Release: 11.5 to 12.2Information in this document applies to any platform.FORM:INVTOMAI.FMB - Response CenterSymptomsIn the Move Orders form (INVTOMA…

实景三维赋能智慧公安建设

在新型智慧城市建设的大潮中,智慧公安作为关键一环,对于提高城市安全和治理效率具有重要意义。实景三维技术以其独特的优势,为智慧公安建设提供了强有力的支撑。本文将探讨实景三维技术如何赋能智慧公安建设。一、智慧公安建设的重要性智慧公安是利用现代信息技术,实现对城…

OpenAI模型whisper 音频转文本

最近有一个音频转文本的需求,了解到了OpenAI的whisper模型可以实现。 Whisper 是 OpenAI 提供的一个通用语音识别模型,支持多语言的音频转文本功能,并具有较高的准确性。它的主要用途包括自动语音识别 (ASR)、语言翻译(将音频直接翻译成英文文本)等。Whisper 支持将长时间…

想定制RK3562主板Android系统的开机动画和桌面壁纸吗?看这篇文章就够了

本文介绍瑞芯微RK3562开发板在安卓Android13系统替换开机动画和桌面壁纸的方法,使用触觉智能EVB3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1T算力 NPU,可用于轻量级人工智能应用。 开机动画替换 将做好的开机动画文件bootanimation.zip包拷贝至 vendor/roc…

mysql可视化工具 Navicat Premium 12解压版

通过网盘分享的文件:Navicat Premium 12解压版.rar链接: https://pan.baidu.com/s/1kDLlrcaiQRYGLfN5L-IpPA?pwd=3k6h 提取码: 3k6h --来自百度网盘超级会员v8的分享1.解压到指定路径 2.快捷方式,快捷方式用不了,就直接在该文件中直接打开 3. 测试链接