MyBatis 执行流程详解及示例代码

导言:

MyBatis 是一个优秀的持久层框架,它简化了数据库操作的开发过程。本文将详细介绍 MyBatis 的执行流程,并提供相应的示例代码,帮助读者更好地理解和应用 MyBatis。

1. 创建 SqlSessionFactoryBuilder 对象

在 MyBatis 中,首先需要创建一个 SqlSessionFactoryBuilder 对象,并加载 MyBatis 的配置文件。这个对象用于构建 SqlSessionFactory。

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
  • Resources.getResourceAsStream("mybatis-config.xml"):这行代码使用 MyBatis 提供的 Resources 类,通过指定的路径获取配置文件 mybatis-config.xml 的输入流。该配置文件包含了 MyBatis 的配置信息,如数据库连接、映射文件路径等。

  • SqlSessionFactoryBuilder:这行代码创建了一个 SqlSessionFactoryBuilder 对象,用于构建 SqlSessionFactory

  • builder.build(inputStream):这行代码通过调用 builder 对象的 build 方法,传入配置文件的输入流 inputStream,来构建并返回一个 SqlSessionFactory 实例。

2. 创建 SqlSession 对象

通过 SqlSessionFactory 创建 SqlSession 对象,SqlSession 是 MyBatis 与数据库交互的关键对象。

  • factory.openSession():这行代码通过调用 SqlSessionFactoryopenSession() 方法来创建一个 SqlSession 对象。SqlSession 是 MyBatis 的核心接口,用于执行 SQL 语句并管理数据库连接。
SqlSession session = factory.openSession();

3. 执行 SQL 语句


在 SqlSession 中,可以执行各种 SQL 语句,包括查询、插入、更新和删除操作。

- 查询操作:

List<User> userList = session.selectList("com.example.mapper.UserMapper.getAllUsers");

- 插入操作:

User user = new User("John", 25);
session.insert("com.example.mapper.UserMapper.insertUser", user);
session.commit();

- 更新操作:

User user = session.selectOne("com.example.mapper.UserMapper.getUserById", 1);
user.setName("Jane");
session.update("com.example.mapper.UserMapper.updateUser", user);
session.commit();

- 删除操作:

session.delete("com.example.mapper.UserMapper.deleteUser", 1);
session.commit();

4. 映射文件定义


在执行 SQL 语句之前,需要通过映射文件定义 SQL 语句与 Java 对象的映射关系。映射文件通常使用 XML 格式编写,并与 Java Mapper 接口关联。

示例映射文件 `UserMapper.xml`:

<mapper namespace="com.example.mapper.UserMapper"><select id="getAllUsers" resultType="com.example.model.User">SELECT * FROM users</select><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO users (name, age) VALUES (#{name}, #{age})</insert><update id="updateUser" parameterType="com.example.model.User">UPDATE users SET name = #{name} WHERE id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM users WHERE id = #{id}</delete>
</mapper>

5. 事务管理和异常处理


在 MyBatis 中,可以通过事务管理机制来确保数据操作的一致性和完整性。在操作中捕获异常,并在出现异常时进行事务回滚。

try {// 执行数据库操作session.insert("com.example.mapper.UserMapper.insertUser", user);session.commit();
} catch (Exception e){// 异常处理和事务回滚session.rollback();
}

总结:


本文介绍了 MyBatis 的执行流程,从创建 SqlSessionFactoryBuilder 到执行 SQL 语句,并介绍了映射文件的定义和事务管理的使用。MyBatis 是一个强大且灵活的持久层框架,通过了解其执行流程,可以更好地应用于实际项目中。

扩展阅读:


- MyBatis 官方文档:https://mybatis.org/mybatis-3/zh/index.html
- MyBatis GitHub 仓库:https://github.com/mybatis/mybatis-3

希望这篇博客能对您有所帮助,如有任何疑问,欢迎随时向我提问。

 

 

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

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

相关文章

【SpringCloud学习笔记】gateway网关

gateway网关 核心概念&#xff1a; 路由&#xff08;route&#xff09;&#xff1a;路由信息由 D、目标 RI、一组断言和一组过滤器组成。如果断言路由为真&#xff0c;则说明请求的 URI 和配配断言&#xff08;predicate&#xff09;&#xff1a; Java8 中的断言函数&#xf…

总结911

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.回诵之前文章 2.每日长难句&#xff0c;句句…

人工智能(1):机器学习工作流程

1 什么是机器学习 机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测。 2 机器学习工作流程 机器学习工作流程总结 1 获取数据 2 数据基本处理 3 特征工程 4 机器学习(模型训练) 5 模型评估 结果达到要求&#xff0c;上线服务没有达到要求&a…

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】 链接&#xff1a;https://pan.baidu.com/s/1KSNll7b6bVoVPPqcQmNKeQ 提取码&#xff1a;w13x

计算机组成原理(期末或考研备考)-计算机系统概述重点

1.1计算机发展历程 讲解视频&#xff1a; https://www.bilibili.com/video/BV15s4y1F7eC/?spm_id_from333.999.0.0 1946第一台电子数字计算机(ENIAC)第一代计算机&#xff08;1946-1957&#xff09;-- 电子管&#xff1b;体积大&#xff0c;容量小&#xff0c;成本高&#x…

Tomcat的部署和优化

目录 一、Tomcat简介 二、Tomcat 的构成 三、Tomcat 功能组件结构 四、Tomcat 请求过程 五、Tomcat 服务部署 六、Tomcat 虚拟主机配置 七、Tomcat优化 1.Tomcat 配置文件参数优化 2.JVM优化 一、Tomcat简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个…

03 Web全栈 浏览器内置对象/事件/ajax

浏览器是一个JS的运行时环境&#xff0c;它基于JS解析器的同时&#xff0c;增加了许多环境相关的内容&#xff0c;用一张图表示各个运行环境和JS解析器的关系如下&#xff1a; 我们把常见的&#xff0c;能够用JS这门语言控制的内容称为一个JS的运行环境&#xff0c;常见的运行环…

three.js通过CubeTexture加载环境贴图,和RGBELoader加载器加载hdr环境贴图

一、使用CubeTexture进行环境贴图 1.CubeTexture使用介绍 Three.js中可以通过使用CubeTexture进行环境贴图&#xff0c;CubeTexture需要将6张图片&#xff08;正面、反面、上下左右&#xff09;包装成一个立方体纹理。下面是一个简单的例子&#xff1a; 首先需要加载六张贴图…

前端JavaScript入门-day03

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 1、循环-for 1. for 循环-基本使用 1. for循环语法 2. 退出循环 2. for 循环嵌套 2、数组 1 数组是…

18.RocketMQ中消息重复的场景和幂等处理

highlight: arduino-light 消息重复的场景 发送消息异常,重试发送导致消息重复★ 当一条消息已被成功发送到服务端并完成持久化。此时出现网络闪断或者客户端宕机&#xff0c;导致服务端对生产者的确认应答失败。生产者发送消息到mq时发送成功未获取到响应,然后生产者进行消息发…

java.util.concurrent.Executionexception 异常

报错截图&#xff1a; 今天运行时发生了如下报错。自己捣鼓半天也没发现问题出在哪儿&#xff0c;感谢大佬的帮助&#xff0c;记录下来防止再犯。。 caused by org.apache.flink.client.program.programInvocationException: Job failed。程序调用异常。网上找了很多解决方法…

数字图像处理-图像复原与重建

文章目录 一、图像退化/复原过程的模型二、噪声模型2.1噪声的空间和频率特性2.2一些重要的噪声概率密度函数2.2.1高斯噪声2.2.2瑞利噪声2.2.3爱尔兰&#xff08;伽马&#xff09;噪声2.2.4指数噪声2.2.5均匀噪声2.2.6脉冲&#xff08;椒盐&#xff09;噪声 2.3周期噪声 三、只存…