Mybatis系列(一):mybatis解析xml之前的准备工作

前言

什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

上边这段话是引用自mybatis的官网,使用过mybatis的同学不难发现,我们一般情况下都需要借助xml文件,来帮助我们完成sql语句的拼装(如果使用mybatis-plus,涉及到连表查询,同样需要书写xml)和一些结果集的映射

所以不难看出xml文件,是mybatis中不可获取的一部分,所以解析xml对于mybatis框架同样重要。这篇博客就来总结一下,mybatis是如果进行xml的解析的。

xml的解析准备

在进行xml解析mapper.xml之前,mybatis还需要进行一些准备工作。Mybatis文档的入门章节,最开始就提到了SqlSessionFactory这个类。我们一起的配置工作也是从这个类开始的。

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

下边这张图就是sqlSessionFactory创建的具体方法
在这里插入图片描述

1.实例化SqlSessionFactory,并进行configuration的初始化,PS: configuration十分重要,几乎做事情,都要带着这个配置类,这个类里装载了很多重要的信息,相当于一个管家的身份,贯穿始终

2.factory里边都是一些环境的配置信息,我们会在springboot的application配置mapper的扫描路径,这个信息也是放在factory中的,对应上图中mapperLocations这个属性

下边这些信息就会被解析出来放到configuration中。和springboot集成后,配置信息将不再使用xml文件方式,与之替代的是application.yml文件,这些内容mybatis都已经集成在org.mybatis.spring包中,我们就不用操心了

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

文档中提到了sqlSessionFactory的最佳实践方式,在看源码的工程当中,也会发现,这个类使确实是单例模式
在这里插入图片描述

3.在这个方法的最后调用了getObject()方法,这个发放会调用SqlSessionFactoryBean的buildSqlSessionFactory进行进一步的配置完善,其中就包含了xml解析的配置
在这里插入图片描述
4.如果mapper.xml文件的路径不为空,则开始解析xml文件,解析的第一步就是创建一个XMLMapperBuilder

在这里插入图片描述

写在后边

这一篇先写到这里,下一篇具体写一下xml的解析过程。

猜你喜欢

转载自blog.csdn.net/cd18333612683/article/details/112430230