MyBatis源码系列3(解析配置文件,创建SqlSessionFactory对象)

news2024/12/29 15:22:46

创建SqlSessionFactory; 首先读取配置文件,使用构造者模式创建SqlSessionFactory对象。

  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

创建SqlSessionFactory 时序图。
在这里插入图片描述核心:解析xml配置文件,解析的配置文件用Configuration对象保存。

解析配置文件核心步骤:

//从根节点解析
parseConfiguration(parser.evalNode("/configuration"));
private void parseConfiguration(XNode root) {
    try {
      //issue #117 read properties first
      propertiesElement(root.evalNode("properties"));
      //设置
      Properties settings = settingsAsProperties(root.evalNode("settings"));
      loadCustomVfs(settings);
      //自定义别名
      typeAliasesElement(root.evalNode("typeAliases"));
      //拦截器
      pluginElement(root.evalNode("plugins"));
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      reflectorFactoryElement(root.evalNode("reflectorFactory"));
      settingsElement(settings);
      // read it after objectFactory and objectWrapperFactory issue #631
      environmentsElement(root.evalNode("environments"));
      databaseIdProviderElement(root.evalNode("databaseIdProvider"));
      //自定义数据类型转换器
      typeHandlerElement(root.evalNode("typeHandlers"));
      //解析mapper  重要
      mapperElement(root.evalNode("mappers"));

    } catch (Exception e) {
      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }
  }

解析顺序与配置文件中的设置信息完全一致。
在这里插入图片描述
Configuration对象几个主要的属性:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++面试基础系列-struct

系列文章目录 文章目录 系列文章目录C面试基础系列-struct1.C中struct2.C中struct2.1.同名函数2.2.typedef定义结构体别名2.3.继承 3.总结3.1.C和C中的Struct区别 4.struct字节对齐5.struct与const 关于作者 C面试基础系列-struct 1.C中struct struct里面只能放数据类型&#…

算法力扣刷题记录 八十六【47.全排列 II】

前言 回溯章节第12篇。 记录 八十四【46.全排列】初步学习了集合中无重复元素的排列求解。 本文:记录 八十六【47.全排列 II】当集合中有重复元素时,求解排列; 一、题目阅读 给定一个可包含重复数字的序列 nums ,按任意顺序 返回…

VirtualBox安装Oracle Linux 7.9全流程

1.准备工作 1.1 VirtualBox下载 下载地址1: Downloads – Oracle VM VirtualBoxhttps://www.virtualbox.org/wiki/Downloads 下载地址2: https://www.oracle.com/virtualization/virtualbox/ 选择以上的任意一个地址都可下载到。 1.2 Oracle Linux 操作…

购物车系统设计方案

背景 在电商领域,购物车(Shopping Cart)扮演着至关重要的角色,它是连接用户浏览商品与最终完成购买行为的桥梁。 从两个视角来阐述,作为ToC的购物车,存在的意义: 从用户角度: 收…

ssm大学生实习管理系统的设计与实现-计算机毕业设计源码45837

摘 要 在信息时代,随着网络的快速发展,各个行业都离不开信息的处理。在这样的背景下,高校需要以学生管理信息为导向,并与学生实习的持续创新相结合。因此,设计一个高校学生实习管理系统就显得非常必要。 该系统采用了B…

维基百科向量搜索;简单易用的GraphRAG实现;友好的人工智能助手;AI的音乐多模态

✨ 1: Semantic Search on Wikipedia 维基百科向量搜索 为了证明 Upstash Vector 的可扩展性,Upstash在一个数据库中以 11 种语言(144m 向量)索引了整个维基百科 ◆ 超过700GB的数据 ◆ 快速语义搜索 ◆ 与维基百科聊天 为您提供了一款可…

Unity--AssetBundle AB包管理器

1.简介 AB包(AssetBundle)是Unity中用于资源管理的一种机制,它允许开发者将多个文件(如纹理、模型、音频等)打包成一个单独的文件,以便于在游戏运行时动态加载和卸载。 但是现在出现了最新的Addressable来…

Python匿名函数之lambda表达式使用详解

概要 在Python编程中,函数是组织代码和实现逻辑的基础单元。除了使用def关键字定义命名函数外,Python还提供了创建匿名函数的方式,即lambda表达式。lambda表达式是一种简洁的函数定义方式,通常用于需要简短函数的场景。本文将详细介绍Python匿名函数的概念、使用场景及其高…

基于51单片机的双机通信控制系统proteus仿真

地址: https://pan.baidu.com/s/1Y4wOJKOYf2E4JeEktyKdTw 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…

微分方程(Blanchard Differential Equations 4th)中文版Section3.1

3.1 PROPERTIES OF LINEAR SYSTEMS AND THE LINEARITY PRINCIPLE(线性系统问题与线性算子原理) 在第2章中,我们专注于研究微分方程组的定性和数值方法。之所以这样做,是因为我们很少能找到具有两个或更多个因变量的系统的明确解公式。唯一的例外是线性系统。在本章中,我们…

Linux·权限与工具-yum与vim

1. Linux软件包管理器 yum 1.1 什么是软件包 在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但这样做太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成Win…

12.2 使用prometheus-sdk向pushgateway打点

本节重点介绍 : 使用golang sdk打prometheus4种指标,推送到pushgateway gauge、counter、histogram、summary的初始化4种类似的设置值的方法推送到pushgateway的方法 prometheus配置采集pushgateway,grafana上配大盘 golang-sdk 项目地址 https://git…

【图数据库系列】Cypher查询语句:常用语法指南

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HTML常用标签和CSS的运用,以及使用HTML做一个简历

目录 1.HTML标签 1.1 文档结构标签 1.2 文本格式标签 1.3 列表标签 1.4 链接和媒体标签 1.5 表格标签 1.6 表单标签 1.7 分区和布局标签 1.8 元数据标签 2.css样式 2.1 字体样式 2.2 文本样式 2.3 背景样式 2.4 边框样式 2.5 间距样式 2.6 宽度和高度 2.7 显示…

三种简单排序:插入排序、冒泡排序与选择排序 【算法 05】

三种简单排序:插入排序、冒泡排序与选择排序 在编程中,排序算法是基础且重要的知识点。虽然在实际开发中,我们可能会直接使用标准库中的排序函数(如C的std::sort),但了解并实现这些基础排序算法对于理解算法…

JS编程中有哪些常见的编程“套路”或习惯

JS编程中有哪些常见的编程“套路”或习惯 从个人的编程经验来看,不管你是前端JS编程还是后端Java编程,在一些习惯上基本是通用的。就是你编写的JS代码必须要功能完善且易于阅读易于维护。那么这里整理一下JS编程过程中一些比较行之有效的编程习惯。 函数…

3.Default Constructor的构造操作

目录 1. 问题引入 2. 4种implicitly声明的default constructor 1. 问题引入 “default constructors......在需要的时候被编译产生出来”。关键词是“在需要的时候”,被谁需要,做什么事情?看看下面的代码,然后梳理下思路。 cl…

章二十、Servlet ——

一、 web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互,流程如下: ● 什么是服务器? Web服务器是指驻留于因特网上某种类型计算机的程序,它可以向浏览器等Web客户端提供文档,也可以放置…

算法的学习笔记—反转链表(牛客JZ24)

😀前言 在算法面试中,链表问题是一个常见的考点,而反转链表更是其中的经典题目之一。本篇文章将通过具体的代码实现和思路解析,带你深入理解反转链表的解法。 🏠个人主页:尘觉主页 文章目录 😀反…

【前端】NodeJS:项目上线

文章目录 1 项目上线1.1 搭建本地仓库1.1.1 初始化仓库1.1.2 全局忽略1.1.3 提交 1.2 连接远程仓库1.2.1 新建仓库1.2.2 复制地址1.2.3 添加远程存储库 1.3 发布项目 2 配置HTTPS证书2.1 HTTPS2.2 操作流程: 1 项目上线 1.1 搭建本地仓库 1.1.1 初始化仓库 1.1.2 全局忽略 1.…