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

相关推荐
敲个大西瓜10 天前
mybatis拦截器插件实现数据库字段加解密
mybatis
武子康10 天前
Java-28 深入浅出 Spring 实现简易Ioc-04 在上节的业务下手动实现AOP
java·后端·mybatis
一条泥憨鱼10 天前
苍穹外卖【day6|微信登录与商品浏览功能】
后端·mybatis·苍穹外卖
vx-Biye_Design10 天前
springboot安阳地区研学旅游服务小程序-计算机毕业设计源码12785
java·vue.js·windows·spring boot·tomcat·maven·mybatis
摇滚侠10 天前
MyBatis+Spring+SpringMVC SSM 整合 179-185
java·spring·mybatis
摇滚侠10 天前
MyBatis+Spring+SpringMVC SSM ContextLoaderListener 177-178
java·spring·mybatis
Spring小子11 天前
【Spring Boot + Vue + DeepSeek】从零打造一个AI驱动的智能健康分析系统
java·spring boot·mybatis
武子康11 天前
Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC 从 XML 配置到 BeanFactory 反射注入
java·后端·mybatis
柏舟飞流11 天前
Spring Boot 进阶实战:整合 MyBatis、Redis、JWT,搭一个更像真实项目的后端服务
spring boot·redis·mybatis