当前位置: 首页 > news >正文

mybatis源码阅读系列(二)

前言

上一篇文章mybatis源码阅读系列(一)介绍了mybatis和原生jdbc的区别,并通过代码展示了两者的运行过程和结果,下面让我们继续详细了解下mybatis的执行过程;

package com.wyl.mybatis.service;import com.wyl.mybatis.entity.FullCity;
import com.wyl.mybatis.mapper.FullCityMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;/*** @Description* @Author WuYiLong* @Date 2024/2/26 16:04*/
public class MybatisService {public static void main(String[] args) throws IOException {// 读取mybatis的配置文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");// 通过SqlSessionFactoryBuilder 的 build 方法用于解析配置文件并创建 SqlSessionFactory 对象。SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// SqlSessionFactory 通过解析配置文件(通常是 mybatis-config.xml)和映射文件(mapper.xml),来创建一个能够执行映射语句的会话对象SqlSessiontry(SqlSession sqlSession = sqlSessionFactory.openSession()) {// 使用SqlSession获取映射器实例FullCityMapper mapper = sqlSession.getMapper(FullCityMapper.class);// 使用映射器执行操作FullCity fullCity = mapper.selectByName("广东省");System.out.println("城市的名称:"+fullCity.getName());}}
}

改造了一下获取SqlSession的方式,使用try-with-resources的语法自动管理资源,为什么可以使用这个方法呢?因为SqlSession继承了Closeable这个接口,换而言之,凡是继承或实现这个接口的方法都可以用这种方式。

读取配置文件(mybatis-config.xml)

Resources.getResourceAsStream(resource) 方法是 MyBatis 提供的一个工具方法,用于从类路径下加载资源文件。
在这里插入图片描述

image.png
image.png

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 是 MyBatis 框架中的一个关键组件,它用于创建 SqlSessionFactory 实例。SqlSessionFactoryBuilder 在创建 SqlSessionFactory 之后通常就没有其他用途了,因此它可以在创建 SqlSessionFactory 之后被丢弃。
image.png
我们可以看到,SqlSessionFactoryBuilder利用了方法重载创建了SqlSessionFactory,同时使用了建造者模式

SqlSessionFactory

image.png
SqlSessionFactory 是 MyBatis 框架的核心接口之一,它负责创建 SqlSession 实例
从上面可以看出SqlSessionFactory是通过实现类DefaultSqlSessionFactory构造方法传入配置信息创建实例的

SqlSession

SqlSession 是 MyBatis 框架中用于与数据库交互的接口。它是 MyBatis 应用程序中执行 SQL 语句、获取映射器(mappers)和进行事务控制的主要接口。SqlSession 实例是通过 SqlSessionFactory 创建的,并且在使用完毕后需要关闭以释放资源。

image.png
从上面可以看出,SqlSession 是通过SqlSessionFactory,利用工厂方法创建的,其中有两种方式:
image.png
openSessionFromConnection :它允许你使用一个已有的数据库连接来创建 SqlSession。
openSessionFromDataSource :它允许你使用一个已有的数据源(DataSource)来创建 SqlSession。这种方法在需要控制数据源的使用,而不是直接管理数据库连接的场景中非常有用。数据源通常由连接池实现,它负责数据库连接的创建、管理和回收。

在这里插入图片描述

相关文章:

  • 【SpringCloud微服务实战08】RabbitMQ 消息队列
  • Lua中文语言编程源码-第五节,更改lcorolib.c协程库函数, 使Lua加载中文库关键词(与所有的基础库相关)
  • 突破编程_C++_C++11新特性(nullptr、constexpr与基于范围的 for 循环)
  • 数字孪生与智慧城市:实现城市治理现代化的新路径
  • ES6(二):解构赋值、Symbol、Map和Set、数组的扩展方法
  • 【漏洞复现】大华智慧园区综合管理平台deleteftp命令执行漏洞
  • 从零开始的LeetCode刷题日记:替换数字
  • 小白必看的Python基础之函数篇
  • 如果网络不好 如何下载huggingface上的模型
  • 华为三层交换机:ACL的基本实验
  • WPF制作带图标和文字的按钮模板(通过附加属性实现)
  • 3、设计模式之工厂模式2(Factory)
  • Ubuntu 20.04 系统如何优雅地安装NCL?
  • web 课程
  • Linux-新手小白速秒Hadoop集群全生态搭建(图文混编超详细)
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 08.Android之View事件问题
  • extract-text-webpack-plugin用法
  • github指令
  • Javascript 原型链
  • JavaScript实现分页效果
  • Java反射-动态类加载和重新加载
  • Java基本数据类型之Number
  • Java小白进阶笔记(3)-初级面向对象
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • php ci框架整合银盛支付
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue中实现单选
  • 阿里云前端周刊 - 第 26 期
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 那些年我们用过的显示性能指标
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 我与Jetbrains的这些年
  • 用 Swift 编写面向协议的视图
  • 怎么将电脑中的声音录制成WAV格式
  • 怎样选择前端框架
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Spring第一个helloWorld
  • 容器镜像
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # include “ “ 和 # include < >两者的区别
  • #100天计划# 2013年9月29日
  • ( 10 )MySQL中的外键
  • (¥1011)-(一千零一拾一元整)输出
  • (11)MSP430F5529 定时器B
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...