2024年150道高频Java面试题(七十二)

143. MyBatis 的工作原理是什么?

MyBatis 是一个半ORM(对象关系映射)框架,它允许将对象与数据库中的记录相关联,同时保留对SQL语句的完全控制权。以下是MyBatis的工作原理:

  1. 配置SQL映射文件
    • MyBatis 允许通过XML或注解的方式来配置SQL语句和对象之间的映射关系。
    • 在XML配置文件中,可以定义数据库连接信息、事务管理、数据源以及SQL语句。
  2. 创建SqlSession
    • MyBatis 通过SqlSessionFactory来创建SqlSession。SqlSession是MyBatis的核心接口,用于执行映射的SQL语句。
    • SqlSessionFactory是在MyBatis配置文件中配置的,它可以根据配置创建SqlSession实例。
  3. 执行SQL
    • 在获得了SqlSession实例之后,就可以通过它来执行SQL语句。
    • MyBatis 支持传统的API调用方式,也支持Mapper接口调用方式。
  4. Mapper接口
    • MyBatis 允许定义一个Mapper接口,接口的方法与SQL映射文件中的SQL语句相对应。
    • 通过Java的动态代理机制,MyBatis 会自动为Mapper接口生成一个代理实例,该代理实例可以执行接口方法对应的SQL语句。
  5. SQL动态绑定
    • MyBatis 使用OGNL(Object Graph Navigation Language)或Java EL表达式语言进行动态SQL绑定。
    • 它允许在XML映射文件中编写动态SQL语句,如<if><choose><when>等,可以根据不同的参数条件生成不同的SQL。
  6. 参数映射和结果映射
    • MyBatis 支持各种参数映射,包括简单类型、HashMap、POJO(Plain Old Java Object)等。
    • 结果映射可以将SQL查询结果直接映射到POJO对象或集合。
  7. 事务管理
    • MyBatis 提供了事务管理机制。可以通过JDBC的事务管理或者与Spring框架集成来实现事务控制。

以下是一个简单的代码示例:

// 创建一个MyBatis的SqlSessionFactory
SqlSessionFactory sqlSessionFactory = ...;// 使用SqlSessionFactory来创建SqlSession
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {// 获取Mapper接口的代理实例UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 执行查询操作User user = userMapper.getUserById(1);// 执行更新操作userMapper.updateUser(user);// 提交事务sqlSession.commit();
}

上述流程展示了MyBatis的核心工作原理和基本使用方法。通过这样的设计,MyBatis 将SQL与Java代码分离,保持了SQL的灵活性和优化空间,同时也提供了便捷的对象映射功能。

144. 如何在 MyBatis 中配置和使用映射文件?

在 MyBatis 中,映射文件用于将 SQL 语句与 Java 方法关联起来,它们通常以 .xml 的格式存在。以下是如何配置和使用映射文件的步骤:

1) 创建映射文件

首先,你需要为每个 SQL 映射创建一个 XML 文件。这些文件通常放置在与相应的 mapper 接同名的包中。

例如,如果你有一个 UserMapper 接口,你可以创建一个 UserMapper.xml 文件。

2) 配置 XML 映射文件

下面是一个映射文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><!-- 结果映射 --><resultMap id="userResultMap" type="com.example.model.User"><id column="id" property="id"/><result column="username" property="username"/><result column="password" property="password"/></resultMap><!-- 查询语句 --><select id="selectUserById" parameterType="long" resultMap="userResultMap">SELECT * FROM users WHERE id = #{id}</select><!-- 插入语句 --><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO users(username, password) VALUES(#{username}, #{password})</insert></mapper>
3) 将映射文件与 MyBatis 配置关联

你需要在 MyBatis 的全局配置文件(通常是 mybatis-config.xml)中包含映射文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>

或者,如果你使用的是注解配置,也可以直接在接口上使用 @Mapper 注解,并且不需要在全局配置文件中指定映射器。

@Mapper
public interface UserMapper {// 方法定义
}
4)使用映射文件

在 Java 代码中,你可以通过 MyBatis 提供的 SqlSession 来执行定义在映射文件中的 SQL 语句。

SqlSession sqlSession = sqlSessionFactory.openSession();
try {UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.selectUserById(1L);sqlSession.commit();
} finally {sqlSession.close();
}

通过上述步骤,你就可以在 MyBatis 中配置和使用映射文件了。记住,映射文件中的 SQL 语句应该与相应的接口方法相匹配,并且遵循 MyBatis 的命名和类型转换规则。
编程资料包领取:https://pan.quark.cn/s/601cbea644ff
编程、AI、副业交流:https://t.zsxq.com/19zcqaJ2b
领【150 道精选 Java 高频面试题】请 go 公众号:码路向前 。

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

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

相关文章

TS中constructor使用public 、private 关键字

构造函数参数前的private关键字不是用于声明变量私有性的&#xff0c;而是与依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;相关。当你在构造函数参数中使用private关键字时&#xff0c;Angular会自动为你的组件或指令创建一个注入实例&#xff0c;并…

python列表生成式的魅力:轻松创建新列表

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 1. 列表生成式的基本结构 2. 列表生成式的进阶应用 3. 结合其他结构使用列表生成式 1. 列表…

HTML静态网页成品作业(HTML+CSS)——利物浦足球俱乐部介绍网页设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;共有5个页面。 二、作品演示 三、代码目录 四、网站代码 HTML部分代…

校园招新之获取进QQ群但未报名人员

校园的社团、实验室招新一般由是校领导会发一个QQ通知&#xff0c;让各个班的同学们进一个招新群。 群里面会有负责人提示大家报名&#xff0c;但是群成员不总是都会报名&#xff0c;我们需要的就是&#xff0c;找到那些&#xff0c;已经进群&#xff0c;但是没有报名的同学&am…

ELK 日志监控平台(一)- 快速搭建

文章目录 ELK 日志监控平台&#xff08;一&#xff09;- 快速搭建1.ELK 简介2.Elasticsearch安装部署3.Logstash安装部署4.Kibana安装部署5.日志收集DEMO5.1.创建SpringBoot应用依赖导入日志配置文件 logback.xml启动类目录结构启动项目 5.2.创建Logstash配置文件5.3.重新启动L…

当HR问你是否单身时,该怎么回答?

知识星球&#xff08;星球名&#xff1a;芯片制造与封测技术社区&#xff0c;星球号&#xff1a;63559049&#xff09;里的学员问&#xff1a;我是晶圆厂厂务工程师&#xff0c;最近在面试新工作&#xff0c;但是几乎每家HR都会问我同一个问题&#xff1a;你结婚没有&#xff1…

解密Spring Boot Starter与自动配置:探秘神奇的背后

starter可以理解为Spring Boot中的一站式集成启动器&#xff0c;包含了一系列可以集成到应用中的依赖项&#xff0c;可以快递集成spring组件及其框架&#xff0c;而不需要到处找示例代码。 一、为什么要用starter&#xff1f; 在springboot还没有出来之前&#xff0c;我们使用…

wps使用(解决毕业论文)

目录自动生成 页码自动生成 一部分使用I II III IV 格式&#xff0c;一部分使用1&#xff0c;2&#xff0c;3&#xff0c;4 格式 先设置全部文章为I II III IV 格式&#xff0c;然后再需要的地方再设置1&#xff0c;2&#xff0c;3&#xff0c;4 格式 一键设置中文、英文、数…

2024年全国大学生电工数学建模竞赛B题解析 | 数据处理 代码 论文分享

B 题&#xff1a;大学生平衡膳食食谱的优化设计及评价 1 数据预处理2 问题一2.1 问题1.12.1.1 评价体系的构建2.1.2 指标计算2.1.3 指标计算结果2.1.4 基于层次分析法的膳食营养评价模型2.1.5 评价模型的求解 2.2 问题1.22.2.1 食物与成分间拓扑关系的构建2.2.2 微调模型的建立…

【SpringBoot】整合百度文字识别

流程图 一、前期准备 1.1 打开百度智能云官网找到管理中心创建应用 全选文字识别 1.2 保存好AppId、API Key和Secret Key 1.3 找到通用场景文字识别&#xff0c;立即使用 1.4 根据自己需要&#xff0c;选择要开通的项目 二、代码编写 以通用文字识别&#xff08;高精度版&am…

C# PipStream流的详解与示例

文章目录 PipStream概述PipStream的创建方法PipStream的播放方法PipStream的暂停方法PipStream的删除方法示例代码总结 本文将详细介绍C#中的PipStream流&#xff0c;包括其概述、创建方法、播放方法、暂停方法以及删除方法。通过示例代码&#xff0c;帮助读者更好地理解和掌握…

蚁小二:又一款高效自媒体工具,免费用户可发5个账号

其实自媒体的群发工具有几个&#xff0c;除了前几天介绍的融媒宝还有蚁小二等。因为融媒宝免费用户只能添加5个账号&#xff0c;所以不够用的朋友可以再下载蚁小二使用&#xff0c;这样就有10个账号可以发布了&#xff1a; 蚁小二简介 蚁小二是由长沙草儿绽放科技有限公司自主…

mysql - 索引原理

mysql索引原理 文中的查询, 以该表结构为例 CREATE TABLE user (id int NOT NULL COMMENT id,name varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT 姓名,age int NOT NULL COMMENT 年龄,sex tinyint(1) NOT NULL COMMENT 性别,phone varchar(255) CHARACTER SET utf8mb4…

设计模式9——适配器模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 适配器模式&#xff08;Adapte…

酷开科技以内容为契机,酷开系统向消费者需求的深度挖掘迈进一步

酷开系统还拥有强大的内容资源和推荐算法&#xff0c;能够根据消费者的兴趣爱好为其提供个性化的推荐服务。无论是电影、电视剧、综艺节目&#xff0c;还是新闻、体育、娱乐资讯&#xff0c;酷开系统都能帮助大家快速找到感兴趣的内容&#xff0c;并且通过智能推荐算法不断优化…

(南京观海微电子)——TFT LCM的作用

VCOM介绍 VCOM是液晶分子偏转的参考电压 &#xff0c;要求要稳定&#xff0c;对液晶显示有直接影响&#xff0c;具体的屏不同的话 也是不同的。 电压的具体值是根据输入的数据以及Vcom电压大小来确定的&#xff0c;用来显示各种不同灰阶&#xff0c;也就是实现彩色显示GAMMA简…

YOLOv10详细解读 | 一文带你深入了解yolov10的创新点(附网络结构图 + 举例说明)

前言 Hello大家好&#xff0c;我是Snu77&#xff0c;继YOLOv9发布时间没有多久&#xff0c;YOLOv10就紧接着发布于2024.5.23号&#xff08;不得不感叹YOLO系列的发展速度&#xff0c;但要纠正大家的观点就是不是最新的就一定最好&#xff09;&#xff01; 本文给大家带来的是…

【CTF Web】CTFShow web6 Writeup(SQL注入+PHP+位运算)

web6 1 阿呆一口老血差点噎死自己&#xff0c;决定杠上了 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\|select/i"…

IP协议基本概念

IP协议全称为"网际互连协议&#xff08;Internet Protocol&#xff09;"&#xff0c;IP协议是TCP/IP体系中的网络层协议 TCP作为传输层控制协议&#xff0c;其保证的是数据传输的可靠性和传输效率&#xff0c;但TCP提供的仅仅是数据传输的策略&#xff0c;而真正负责…

Textual for Mac:轻量级IRC客户端

在寻找一款高效、轻量级的IRC客户端时&#xff0c;Textual for Mac无疑是你的不二之选。它集成了众多现代技术&#xff0c;如本机IPv6、最新的IRCv3规范&#xff0c;以及客户端证书身份验证&#xff0c;让你的聊天体验更加顺畅和安全。 Textual for Mac v7.2.2免激活版下载 Tex…