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。这种方法在需要控制数据源的使用,而不是直接管理数据库连接的场景中非常有用。数据源通常由连接池实现,它负责数据库连接的创建、管理和回收。

相关推荐
小徐敲java8 小时前
通用mybatis-plus查询封装(QueryGenerator)
mybatis
OEC小胖胖9 小时前
Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
java·spring boot·后端·spring·mybatis·web
计算机学姐10 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
落落落sss10 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
罗曼蒂克在消亡13 小时前
2.3MyBatis——插件机制
java·mybatis·源码学习
cyt涛15 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
OLDERHARD19 小时前
Java - MyBatis(上)
java·oracle·mybatis
计算机学姐1 天前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis
我是浮夸1 天前
MyBatisPlus——学习笔记
java·spring boot·mybatis
编程、小哥哥2 天前
手写mybatis之Mapper XML的解析和注册使用
xml·java·mybatis