MyBatis 如何创建 SqlSession 对象的?

MyBatis运行原理(二)SqlSession对象创建过程分析 PS:这篇博文承接上一篇: MyBatis运行原理(一)SqlSessionFactory对象创建过程分析 在上一篇博文中分析了SqlSessionFactory对象创建的过程,有了SqlSessionFactory对象工厂就可以创建SqlSession了,下面就来具体分析一下SqlSession对象创建的过程。 一、SqlSession对象创建过程分析 入口程序: priv... 阅读详情

MyBatis 创建 SqlSession 对象的过程主要由 SqlSessionFactory 接口及其实现类来完成。以下是详细步骤:

1. SqlSessionFactory 接口:

  • SqlSessionFactory 是 MyBatis 的核心接口之一,它负责创建 SqlSession 对象。 你可以将 SqlSessionFactory 视为 SqlSession 的工厂。
  • SqlSessionFactory 接口定义了多个 openSession() 方法,用于创建 SqlSession。这些方法提供了不同的选项,例如:
    * openSession(): 使用默认配置(通常是不自动提交事务)。
    * openSession(boolean autoCommit): 指定是否自动提交事务。
    * openSession(ExecutorType execType): 指定执行器类型 (SIMPLE, REUSE, BATCH)。
    * openSession(TransactionIsolationLevel level): 指定事务隔离级别。
    * openSession(Connection connection): 使用外部提供的数据库连接。

2. SqlSessionFactoryBuilder:

  • SqlSessionFactoryBuilder 是一个构建器类,用于构建 SqlSessionFactory 实例。
  • 它提供了多个 build() 方法,可以通过以下方式构建 SqlSessionFactory:
    * 从 XML 配置文件 (mybatis-config.xml) 构建。
    * 从 Configuration 对象构建。
    * 从 InputStream 或 Reader 构建。
// 从 XML 配置文件构建 SqlSessionFactory (最常见的方式)
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 从 Configuration 对象构建 SqlSessionFactory
Configuration configuration = new Configuration();
// ... 添加配置信息 ...
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
  • SqlSessionFactoryBuilder 在构建完 SqlSessionFactory 后,其自身的使命就完成了,通常不需要保留它的实例。最佳实践是在方法内部创建 SqlSessionFactoryBuilder,构建 SqlSessionFactory,然后丢弃 SqlSessionFactoryBuilder。

3. DefaultSqlSessionFactory (默认实现):

  • DefaultSqlSessionFactory 是 SqlSessionFactory 接口的默认实现类。
  • SqlSessionFactoryBuilder 的 build() 方法通常会创建一个 DefaultSqlSessionFactory 实例。

4. openSession() 方法 (创建 SqlSession 的核心):

  • DefaultSqlSessionFactory 的 openSession() 方法(及其重载方法)负责创建 SqlSession 对象。
  • 创建 SqlSession 的过程大致如下:
  1. 获取 Environment: 从 Configuration 对象中获取 Environment 对象,Environment 对象包含了数据源、事务管理器等信息
  2. 创建 Transaction: 根据 Environment 中的 TransactionFactory 创建 Transaction 对象。Transaction 对象负责管理数据库事务。
  3. 创建 Executor: 根据配置信息(例如,defaultExecutorType 设置)和 Transaction 对象创建 Executor 对象。Executor 负责执行 SQL 语句,并处理缓存。
  4. 创建 DefaultSqlSession: 创建 DefaultSqlSession 对象,并将 Configuration、Executor 和 autoCommit 标志(是否自动提交事务)传递给 DefaultSqlSession 的构造函数。
  5. 返回 DefaultSqlSession: openSession() 方法返回新创建的 DefaultSqlSession 对象。
    // DefaultSqlSessionFactory 的 openSessionFromDataSource() 方法 (简化版)
    private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
        Transaction tx = null;
        try {
            final Environment environment = configuration.getEnvironment();
            final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
            tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
            final Executor executor = configuration.newExecutor(tx, execType);
            return new DefaultSqlSession(configuration, executor, autoCommit);
        } catch (Exception e) {
            closeTransaction(tx); // may have fetched a connection so lets call close()
            throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);
        } finally {
            ErrorContext.instance().reset();
        }
    }
    

5. DefaultSqlSession:

  • DefaultSqlSession 是 SqlSession 接口的默认实现类。
  • 它包含了执行 SQL 语句、获取 Mapper 接口实例、管理事务等方法。
  • DefaultSqlSession 内部持有 Configuration 对象、Executor 对象和 autoCommit 标志。

总结:

MyBatis 创建 SqlSession 对象的过程如下:

  1. SqlSessionFactoryBuilder 构建 SqlSessionFactory (通常是 DefaultSqlSessionFactory)。
  2. 调用 SqlSessionFactory 的 openSession() 方法。
  3. DefaultSqlSessionFactory 创建 Transaction、Executor 和 DefaultSqlSession 对象。
  4. openSession() 方法返回 DefaultSqlSession 对象。

SqlSessionFactory 是 SqlSession 的工厂,DefaultSqlSessionFactory 是 SqlSessionFactory 的默认实现,DefaultSqlSession 是 SqlSession 的默认实现。SqlSessionFactoryBuilder 用于构建 SqlSessionFactory。

Spring整合MyBatis之SqlSession对象的产生 目录前言 前言 在 上一篇 文章中,我们知道 MyBatis 有四大核心对象,分别是 SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession,Mapper 映射器,而 MyBatis 在和 Spring 整合之后,Spring 会帮助我们管理 SqlSessionFactory、SqlSession、Mapper 映射器这些核心 bean;在 这一篇 文章中已经阐述了 SqlSessionFactory 对象的产生过程,在本篇文章中就是来阐述 SqlS 阅读详情

相关推荐

S4 HANA 1809+折旧过账(AFAB/AFABN)凭证行数据存储逻辑变迁:从BSEG到ACDOCA的深度解析

本文深度解析了S4 HANA 1809+版本中折旧过账(AFAB/AFABN)凭证行数据存储逻辑的变迁,从传统的BSEG表迁移到ACDOCA表。文章详细探讨了这一变更的技术背景、官方设计意图及实际影响,包括数据存储量减小和系统性能提升等优势。同时提供了升级项目的应对策略和最佳实践建议,帮助用户顺利过渡到新的数据存储模型。

weixin_28731223的博客 294

【MyBatis】原理一:创建SqlSessionFactory对象

目录 一、SqlSessionFactoryBuilder的build方法 二、XMLConfigBuilder 2.1 properties 2.2 settings 2.3 typeAliases 2.4 plugins 2.5ObjectFactory、objectWrapperFactory、reflectorFactory 2.6 environments 2.7databaseIdProvider 2.8typeHandlers 2.9 mappers 一、Sql...

winrh的博客 2254

东华大学oj系统 39 最大乘积

39 最大乘积 作者: Turbo时间限制: 1S章节: 深度优先搜索 问题描述 : 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入说明 : 第一行一个数表示数据组数   每组输入数据共2行:   第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,   第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。 输出说明 : 每组数据输出1行,为最大的乘积。 输入范例 : 1 5 5 1 2 3 4 2 输出范例 : 48 注:难

weixin_50336369的博客 528

MyBatis源码系列之四:SqlSessionFactory的创建

欢迎来到MyBatis源码系列的第四篇文章。在前面的文章中,我们介绍了MyBatis的总览和环境准备,以及配置文件的解析过程。本篇文章将深入探讨MyBatis中SqlSessionFactory的创建过程,这是MyBatis框架中非常重要的一部分。

Dingxiaowei77的专栏 1165

Docker 安装 CentOS7

本文主要介绍了docker 下安装centos7。访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。可以通过 Sort by 查看其他版本的 CentOS 。默认是最新版本 centos:latest 。 使用以下命令来查看是否已安装了 centos7: 启动centos容器,并把docker上centos的22端口映射到本机60001端口(端口号可以自己指定) 3、进入到Centos容器 4.安装ssh服务和网络必须软件

折腾java的博客 1万+

在线绘制富集分析多组气泡图和单细胞分析marker基因矩阵气泡图

常规的GO或者KEGG通路富集分析结果通常以气泡图的形式展示,然而这个气泡图仅仅是一个比较的结果,如果想在一张图上展示多个比较的结果,就需要用到多组气泡图(图1,左侧)。 单细胞RNA-seq分析结果中,矩阵形式的气泡图可以很好地展示marker基因(X轴)在不同cluster(Y轴)中的表达情况(图1,右侧)。

微生信 3666

mybatis学习_SqlSessionFactory构建过程

使用mybatis功能前,我们先得创建一个 SqlSessionFactory 对象,创建过程如下。我们实例化了一个 SqlSessionFactoryBuilder对象,然后让其加载mybatis的配置文件,构建出一个SqlSessionFactory 对象。 String resource = "mybatis-config.xml"; InputStream inputStream = ...

Jiangkang1997的博客 1153

MDPI期刊投稿全流程解析:从注册到提交的实用指南

本文详细解析了向MDPI期刊投稿的全过程,从注册账号、完善个人资料、上传稿件,到填写作者信息、推荐审稿人及提交附信等关键步骤。指南强调了使用机构邮箱、遵循期刊模板、认真准备Cover Letter等实用技巧,旨在帮助作者高效、规范地完成投稿,避免常见错误,提升稿件处理效率。

weixin_29250403的博客 924

Mybatis创建SqlSession的几种方法

SqlSession 使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令,获取映射器和管理事务。我们会概括讨论一下 SqlSession 本身,但是首先我们还是要了解如何获取一个 SqlSession 实例。SqlSession 是由 SqlSessionFactory 实例创建的。SqlSessionFactory 对象包含创建 SqlSess...

WU_XIAO_YAO的博客 1906

让AI稳定生成流程图:基于Skill与Mermaid的工程化实践

流程图是软件工程中沟通业务逻辑的通用语言,但其绘制与维护却长期依赖手工工具,导致文档更新滞后、协作成本高。随着大语言模型技术的成熟,自然语言生成代码已成为可落地的技术路径,而Mermaid作为一款文本化图表语法,凭借其可版本管理、可自动渲染和可嵌入文档的优势,正逐步取代传统绘图工具。要让AI稳定输出合格的流程图,关键在于为模型定义一套清晰的Skill规则,约束输入结构、处理逻辑和输出格式。本文从流程图的工程痛点出发,介绍如何利用大模型将自然语言描述转化为结构化文本,再通过Mermaid CLI渲染成可视化图

weixin_42548782的博客 311

自适应陷波器的原理与实现

x(t)是叠加有两个频率干扰信号的输入信号,s(t)是需要保留的有用信号,在输入信号中,我们只知道频率w1和w2,但不知道信号的幅度A和相位θ,自适应陷波器可以估计两个未知的幅度和相位值,这需要我们提供两路相互正交的单频信号,如cos(w1t)、sin(w1t),通过调整其权值,从而合成出与干扰信号完全相同的信号A1cos(w1t+θ1),从而实现干扰信号的滤除。采用LMS算法,在保证不损失其他有用信号的情况下,有效地抑制输入信号中某一频率的干扰,如需滤除多个频率,只需要增加相应的输入信号。

Melkiades2333的博客 6889

【MyBatis源码】SqlSession实例创建过程

在MyBatis中,openSession()方法是开启数据库会话的入口,主要作用是生成SqlSession对象。我们从SqlSessionFactory接口入手,其实现类DefaultSqlSessionFactory的openSession()方法用于创建SqlSession实例.

发现问题,面对问题,分析问题,解决问题,总结问题 1167

基于python+mediapipe的手势拖动识别(无gpu)

手势点方块拖动

weixin_38029956的博客 5982

Mybatis--SqlSession对象创建过程

Mybatis--SqlSession对象创建过程一. 源码阅读二. 文字总结三. 图像总结 mybatis是个很方便的框架,其中最重要的无疑就是session对象了。知其然,知其所以然才能不断提高,今天开始尝试阅读源码,掌握更多的知识!当然,本篇皆为个人推测总结,博主才疏学浅,有错误望包涵指出! 一. 源码阅读 通过Resource加载全局配置文件,并返回一个流对象 实例化SqlSes...

qq_45489824的博客 2334

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Mybatis源码学习(23)-SqlSession对象的创建过程

一、前言   在前面的内容里,我们已经分析了Mybatis中的基础支撑层的各个模块,后续也分析了在Mybatis开始工作的时候,如何加载并解析相关配置文件的内容。详细可以参考《Mybatis整体架构概述》、《Mybatis启动时的初始化过程》等内容。本节内容,我们开始来分析创建SqlSession对象的过程。 二、SqlSession对象简介   SqlSession类是Mybatis接口层最核心...

向心行者 1757

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MyBatis(一)入门概念知识和创建SqlSession对象

1、什么是MyBatis? 概念:MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有 的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始 映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记 录

西油骄子--Debug 804

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Mybatis源码之创建SqlSession对象

时序图 详细步骤 DefaultSqlSessionFactory#openSessionFromDataSource /** * 从数据源中获取SqlSession对象 * @param execType 执行器类型 * @param level 事务隔离级别 * @param autoCommit 是否自动提交事务 * @return SqlSession对象 */ private SqlSession openSessionFromDataSource(ExecutorType

m0_58559010的博客 392

java session工具类_MyBatis工具类获取创建sqlSession对象

在使用mybatis框架时需要反复创建sqlsession对象,可以使用以下的工具类,直接调用即可,其中需要修改的是mybatis的配置文件的名称。import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.*;import java.io.IOException;import java.io.InputStream...

weixin_39847722的博客 469

Mybatis 源码探究 (3)创建 SqlSessionFactory对象 执行sqlSession.getMapper()方法

Mybatis 源码探究 (3)创建 SqlSessionFactory对象 时隔许久,终于又能接着来搞他啦。Mybatis 一起来探究吧。 先笑会再进入主题吧 开始啦 一、new SqlSessionFactoryBuilder().build(inputStream) 方法 String resource="mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSes

北 737

MyBatis笔记——通过过滤器Filter简化创建SqlSession对象

一 提出问题:为什么要优化代码 首先,先看不使用过滤器filter,直接在方法里面创建SqlSessionFactory工厂 public class StudentService { public int insStudent(Student student) { InputStream iStream = null; int index = 0; try { iStream...

小灰的博客 3818

关于Mybatis工程使用 SqlSession 创建 dao 接口的代理对象 — sqlSession.getMapper(target.class)

在练习mybatis项目时,我们对下面这段代码并不陌生 初学的我们都只背下了 1、先创建 SqlSession 对象 2、调用它的 getMapper(target.class) 方法 获取 目标代理对象 3、最后就能使用此目标对象 调用 我们想调用的业务了 ????首先提出问题一: 为什么要用 getMapper(target.class) 方法 获取 目标代理对象 ? 解答: 因为 Java 中 对于 接口类 是不能直接实例化的。 如果要使用它,就得生成它的实现类,再使用它的实现类来操作接口中

CSNZのBlog 1425

MyBatis——使用工具类创建SqlSession对象

MyBatisUtils.java package org.example1.pojo; 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.i

WHT869706733的博客 999

Mybatis使用工具类创建SqlSession对象实现单条件查询

二、创建数据库。

weixin_46550753的博客 450

[JAVA]MyBatis框架—获取SqlSession对象

假设我们要查询数据库的用户信息,在MyBatis框架中,首先需要通过SqlSessionFactory创建SqlSession,然后才能使用SqlSession获取对应的Mapper接口,进而执行查询操作

2301_79757798的博客 2228

Mybatis源码分析——SqlSession的创建过程

我们可以通过SqlSession实例完成对数据库的增删改查操作。研读MyBatis源码,可以从MyBatis最顶层API入手。本章我们就来了解一下SqlSession实例的创建过程。

lost_gost的博客 1037

MyBatis SqlSession 是如何创建的? 它与 SqlSessionFactory 有什么关系?

是 MyBatis 中与数据库交互的核心接口,它提供了执行 SQL 语句、管理事务、获取 Mapper 接口代理对象等关键功能。的生命周期管理,对于正确使用 MyBatis 至关重要。在 MyBatis 应用中,开发时遵循。是轻量级对象,用于执行 SQL 语句和管理事务。是 MyBatis 与数据库交互的核心接口,它通过。的标准流程,确保资源正确释放和事务的正确性。方法的重载版本,用于创建不同类型的。是重量级对象,负责创建和配置。

专注于技术分享 1323
上一篇: JVM 的不同组成部分分别有什么作用?
下一篇: MyBatis SqlSessionFactory 是如何创建的?
冰糖心书房
博客等级 码龄15年 6016粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值