Mybatis核心类SqlSessionFactory,看完我悟了
哈喽,大家好,我是指北君。
请大家搬好小板凳,指北君将会用最通俗易懂,图文并茂的方式,给大家深入剖析 Mybatis 的实现原理。
本篇文章我们首先解析 SqlSessionFactory 的创建过程。
1、实例代码
在实例代码中,我们在测试类中写了一个 init() 方法,里面包括了 SqlSessionFactory 的构建,分为两步。
第一步:读取配置文件 mybatis-config.xml 输入流
第二步:根据输入流构建 SqlSessionFactory;
没什么难的,去掉 try-catch,也就两行代码。
是的,那只是你以为的两行代码,其实......
话不多说,指北君就来给大家揭秘这冰山下面的东西。
2、代码剖析
根据上面的时序图,我们分析根据源码分析每个步骤。
①、获取配置文件输入流
这里没什么好说的,就是获取配置文件的输入流。
②、build(in)
这里的 in 就是上一步获取的输入流 inputStream。
在进入到 build 方法:
③、XMLConfigBuilder(in)
这一段代码是为了解析我们的配置文件,配置文件是 XML形式 ,我在之前的博客介绍过解析 XML 的几种方式。
一种是基于树的结构来解析的称为DOM;另一种是基于事件流的形式称为SAX和(StAX)
两者各有优缺点,我这里不做详细说明,想了解的可以看我之前的文章。
而 Mybatis 使用的是 DOM 形式,并结合 XPath 来解析配置文件。
④、parse()
从 /configuration 标签处开始解析。然后我们进入到 this.parseConfiguration() 方法中:
看到这是不是很熟悉了,这不就是mybatis-config.xml 配置文件里面的各个标签名嘛,是的,这就是解析该文件,然后全部放在 configuration 对象中。需要注意的是,这里的 configuration 对象不仅包括 mybatis-config.xml 文件内容,也包括 xxxMapper.xml 文件内容。
⑤、build(configuration)
就是去 new 了一个 DefaultSqlSessionFactory 对象,将 configuration 作为参数。
⑥、DefaultSqlSessionFactory(configuration)
3、总结
自此,SqlSessionFactory 的创建过程就讲完了,总的来说就是一个封装了配置文件的工厂类。那么得到了 SqlSessionFactory 这个工厂对象,接下来干嘛?生产 SqlSession,然后通过 SqlSession 进行数据库的增删改查操作。
没错,接下来,指北君将给大家介绍 SqlSession 的交互过程,这也是 Mybatis 里面最重要的一个对象。
相关文章
- 学生数据库管理系统
- SpringDataJpa 用MySQL语句怎么分页,spring全家桶SpringDataJpa 用MySQL语句怎么分页
- Docker创建MySQL容器模板命令
- Elasticsearch对应MySQL的对应关系
- 使用SpringDataJpa保存(save)报错误:SQL Error: 1062, SQLState: 23000 控制台会报:Duplicate entry ‘数‘ for key ‘PRIMA
- Navicat Premium 连接sqlserver数据库时提示安装Client失败,解决方案
- Mysql查询当前用户所有数据库语句(SHOW DATABASES)
- MySQL语句-查看当前数据库有哪些表(SHOW TABLES)
- MySQL5.0版本以上新增的 information_schema 数据库是什么?
- MariaDB数据库备份之逻辑备份
- MariaDB数据库创建用户
- MariaDB数据库给用户授权
- MariaDB数据库刷新权限表命令
- MariaDB数据库删除用户命令
- PhpStudy 2016搭建-sqli-libs靶场
- MySQL手动注入步骤
- Pikachu靶场-SQL注入-数字型注入(post)过关步骤
- Pikachu靶场-SQL注入-字符型注入(get)过关步骤
- 利用SQL注入漏洞实现MySQL数据库读写文件
- Kali-工具-sqlmap常见用法