mybatis源码阅读系列(二)

前言

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

java 复制代码
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),来创建一个能够执行映射语句的会话对象SqlSession
        try(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 提供的一个工具方法,用于从类路径下加载资源文件。


SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 是 MyBatis 框架中的一个关键组件,它用于创建 SqlSessionFactory 实例。SqlSessionFactoryBuilder 在创建 SqlSessionFactory 之后通常就没有其他用途了,因此它可以在创建 SqlSessionFactory 之后被丢弃。

我们可以看到,SqlSessionFactoryBuilder利用了方法重载创建了SqlSessionFactory,同时使用了建造者模式

SqlSessionFactory

SqlSessionFactory 是 MyBatis 框架的核心接口之一,它负责创建 SqlSession 实例

从上面可以看出SqlSessionFactory是通过实现类DefaultSqlSessionFactory构造方法传入配置信息创建实例的

SqlSession

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

从上面可以看出,SqlSession 是通过SqlSessionFactory,利用工厂方法创建的,其中有两种方式:

openSessionFromConnection :它允许你使用一个已有的数据库连接来创建 SqlSession。

openSessionFromDataSource :它允许你使用一个已有的数据源(DataSource)来创建 SqlSession。这种方法在需要控制数据源的使用,而不是直接管理数据库连接的场景中非常有用。数据源通常由连接池实现,它负责数据库连接的创建、管理和回收。

相关推荐
Java小白程序员6 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
山楂树下懒猴子8 小时前
ChatAI项目-ChatGPT-SDK组件工程
人工智能·chatgpt·junit·https·log4j·intellij-idea·mybatis
Mr_hwt_12317 小时前
基于mybatis-plus动态数据源实现mysql集群读写分离和从库负载均衡教程(详细案例)
数据库·spring boot·mysql·mybatis·mysql集群
Z_z在努力1 天前
【杂类】Spring 自动装配原理
java·spring·mybatis
little_xianzhong1 天前
关于对逾期提醒的定时任务~改进完善
java·数据库·spring boot·spring·mybatis
MadPrinter1 天前
SpringBoot学习日记 Day11:博客系统核心功能深度开发
java·spring boot·后端·学习·spring·mybatis
奔跑吧邓邓子2 天前
【Java实战㉟】Spring Boot与MyBatis:数据库交互的进阶之旅
java·spring boot·实战·mybatis·数据库交互
lunzi_fly2 天前
【源码解读之 Mybatis】【基础篇】-- 第1篇:MyBatis 整体架构设计
java·mybatis
摸鱼仙人~2 天前
深入理解 MyBatis-Plus 的 `BaseMapper`
java·开发语言·mybatis
隔壁阿布都2 天前
spring boot + mybatis 使用线程池异步修改数据库数据
数据库·spring boot·mybatis