Mybatis之SqlSessionFactory详解

2024-01-27 10:12

本文主要是介绍Mybatis之SqlSessionFactory详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是升仔

引言

在Mybatis中,SqlSessionFactory 是一个极其核心的组件,它负责创建 SqlSession,后者是进行数据库操作的主要接口。本文将深入探讨 SqlSessionFactory 的原理和应用。

SqlSessionFactory 概述

SqlSessionFactory 是Mybatis的一个接口,它的实现类负责创建 SqlSession 的实例。在Mybatis配置文件中定义了数据源(DataSource)、事务管理器(TransactionManager)等信息,这些信息被用来创建 SqlSessionFactory

创建SqlSessionFactory

创建 SqlSessionFactory 的一般步骤是:

  1. 读取Mybatis配置文件
    使用 Resources 工具类读取Mybatis配置文件。
  2. 构建SqlSessionFactoryBuilder
    创建 SqlSessionFactoryBuilder 实例。
  3. 创建SqlSessionFactory
    通过 SqlSessionFactoryBuilder 读取配置信息创建 SqlSessionFactory
示例代码
javaCopy codeString resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

在这段代码中,首先读取Mybatis的配置文件,然后通过 SqlSessionFactoryBuilder 创建出 SqlSessionFactory 的实例。

SqlSessionFactory的源码分析

SqlSessionFactoryBuilderbuild() 方法中进行了核心的处理工作,它解析配置文件,创建 SqlSessionFactory 实例。

重要代码片段
javaCopy codepublic SqlSessionFactory build(Reader reader, String environment, Properties properties) {try {XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);return build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e);} finally {ErrorContext.instance().reset();try {reader.close();} catch (IOException e) {// 忽略关闭时的异常}}
}

在这个方法中,XMLConfigBuilder 负责解析配置文件,并将解析结果封装成 Configuration 对象,最后使用这个 Configuration 对象创建 SqlSessionFactory

实际应用场景

在实际开发中,通常会在应用初始化时创建一个 SqlSessionFactory 实例,并在整个应用中共享。

应用场景一:Spring集成Mybatis

在Spring应用中,Spring容器负责管理 SqlSessionFactory

Spring配置示例
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean>
应用场景二:Web应用

在Web应用中,可以在 ServletContextListener 中初始化 SqlSessionFactory,并存储在 ServletContext 以供全局使用。

ServletContextListener实现
public class MyAppContextListener implements ServletContextListener {public void contextInitialized(ServletContextEvent sce) {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sce.getServletContext().setAttribute("SqlSessionFactory", sqlSessionFactory);}public void contextDestroyed(ServletContextEvent sce) {// 清理资源}
}
最后说一句(求关注,求赞,别白嫖)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注非常感激

这篇关于Mybatis之SqlSessionFactory详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649916

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据