MyBatis详解初始化基本过程
MyBatis和数据库的交互有两种方式有Java API和Mapper接口两种,所以MyBatis的初始化必然也有两种;那么MyBatis是如何初始化的呢? MyBatis初始化的方式及引入
MyBatis的初始化可以有两种方式:基于XML配置文件:基于XML配置文件的方式是将MyBatis的所有配置信息放在XML文件中,MyBatis通过加载并XML配置文件,将配置文信息组装成内部的Configuration对象。基于Java API:这种方式不使用XML配置文件,需要MyBatis使用者在Java代码中,手动创建Configuration对象,然后将配置参数set 进入Configuration对象中。# 初始化方式 - XML配置
现在就从使用MyBatis的简单例子入手,深入分析一下MyBatis是怎样完成初始化的,都初始化了什么。看以下代码:
有过MyBatis使用经验的读者会知道,上述语句的作用是执行com.foo.bean.BlogMapper.queryAllBlogInfo 定义的SQL语句,返回一个List结果集。总的来说,上述代码经历了三个阶段(本系列也对应三篇文章分别讲解):mybatis初始化 创建SqlSession 执行SQL语句
上述代码的功能是根据配置文件mybatis-config.xml 配置文件,创建SqlSessionFactory对象,然后产生SqlSession,执行SQL语句。而mybatis的初始化就发生在第三句:SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 现在就让我们看看第三句到底发生了什么。# MyBatis初始化基本过程:
SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。
初始化的基本过程如下序列图所示:
由上图所示,mybatis初始化要经过简单的以下几步:调用SqlSessionFactoryBuilder对象的build(inputStream)方法;SqlSessionFactoryBuilder会根据输入流inputStream等信息创建XMLConfigBuilder对象;SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法;XMLConfigBuilder对象返回Configuration对象;SqlSessionFactoryBuilder根据Configuration对象创建一个DefaultSessionFactory对象;SqlSessionFactoryBuilder返回 DefaultSessionFactory对象给Client,供Client使用。
SqlSessionFactoryBuilder相关的代码如下所示:
上述的初始化过程中,涉及到了以下几个对象:SqlSessionFactoryBuilder : SqlSessionFactory的构造器,用于创建SqlSessionFactory,采用了Builder设计模式Configuration :该对象是mybatis-config.xml文件中所有mybatis配置信息SqlSessionFactory:SqlSession工厂类,以工厂形式创建SqlSession对象,采用了Factory工厂设计模式XmlConfigParser :负责将mybatis-config.xml配置文件解析成Configuration对象,共SqlSessonFactoryBuilder使用,创建SqlSessionFactory# 创建Configuration对象的过程
接着上述的 MyBatis初始化基本过程讨论,当SqlSessionFactoryBuilder执行build()方法,调用了XMLConfigBuilder的parse()方法,然后返回了Configuration对象。那么parse()方法是如何处理XML文件,生成Configuration对象的呢?XMLConfigBuilder会将XML配置文件的信息转换为Document对象
而XML配置定义文件DTD转换成XMLMapperEntityResolver对象,然后将二者封装到XpathParser对象中,XpathParser的作用是提供根据Xpath表达式获取基本的DOM节点Node信息的操作。如下图所示:
之后XMLConfigBuilder调用parse()方法
会从XPathParser中取出节点对应的Node对象,然后解析此Node节点的子Node:properties, settings, typeAliases,typeHandlers, objectFactory, objectWrapperFactory, plugins, environments,databaseIdProvider, mappers:
注意:在上述代码中,还有一个非常重要的地方,就是解析XML配置文件子节点的方法mapperElements(root.evalNode("mappers")), 它将解析我们配置的Mapper.xml配置文件,Mapper配置文件可以说是MyBatis的核心,MyBatis的特性和理念都体现在此Mapper的配置和设计上。然后将这些值解析出来设置到Configuration对象中
解析子节点的过程这里就不一一介绍了,用户可以参照MyBatis源码仔细揣摩,我们就看上述的environmentsElement(root.evalNode("environments")); 方法是如何将environments的信息解析出来,设置到Configuration对象中的:
返回Configuration对象
将上述的MyBatis初始化基本过程的序列图细化:
初始化方式 - 基于Java API
当然我们可以使用XMLConfigBuilder手动解析XML配置文件来创建Configuration对象,代码如下:
紫色版iPhone14Pro真的来了真机颜色令人担忧苹果于昨日凌晨正式官宣了今年iPhone14系列的发布时间,定在了9月8日,距今还有两周。今日早间,有博主晒出来一波iPhone14Pro机型各个配色的机模,真实性看起来颇高,今年
刘伟元的旅行视频为何能突出重围笑傲江湖?不外乎三点原因浙江宁海小伙刘伟元是一位旅游博主,目前单单在某条的粉丝就达到70万,他的每条视频都在一刻钟以上,甚至半个小时左右,每条视频播放量都在几十万,播放量最高的一百多万。刘伟元的视频主要是
新时代,我在中国立志走遍中国的南非老师用镜头传递最真实的中国因为爱情以及对中国文化的痴迷,来自南非的杰克随妻子来到陕西西安定居,在从事教师工作之余,他和妻子开始在各地旅行,见证了中国翻天覆地的变化,并通过照片和视频的方式向世界讲述最真实的中
凤凰岭北路行原创北京凤凰岭,是国家4A级旅游景区,位于海淀西北部,总面积10。62平方公里。景区空气清新环境幽静,享有京城绿肺之称,奇峰怪石林海神泉等景观丰富多彩,素有京西小黄山之誉。景区内文化积
苏州河上的桥之浙江路桥聞鍾記郵(4330)苏州河上的桥之浙江路桥在一般人的认知中,江要比河大,比如小河大江大海大洋,于是也给世人留下了江比河大的感觉。其实江也好,河也罢,最终的目的就是奔向大海。在华夏大
每年丧生无数人,但人们还是很疯,看完后的我很感谢自己的国家坐火车是现代人出行的的一个主要方式,在我国在90年代初的时候,火车站基本上都是绿皮车的天下。在那个年代,坐火车的旅行是艰苦的,尤其长途旅行,一点儿也不舒服。在那么狭小的空间里呆上一
这里,就是贵州初秋最美的地方!没有之一如果你没有在初秋去过阿西里西你永远不会知道在贵州,还有这样与众不同震撼人心的美阿西里西是彝族语言,原意为我们的好朋友。新目标现在提到阿西里西,则多指位于赫章县的一个别具特色的景区。
社死式翻车了,怎么办?费尔南多波特罗MonaLisa,布面油画,183166cm,1978年从徐渭驴背行吟图中的断笔到弗兰克劳埃德赖特设计的流水别墅渗水,艺术家们的创作常存在小插曲。什么是翻车?艺术家们
黑龙江玉见查哈阳人民快报黑龙江讯(朱善永通讯员马明远张盈)在遇见查哈阳为主题的旅游中,空中观稻海,稻田坐小火车,南湖垂钓,北岸烧烤,诺敏山庄听涛,金长城上怀古,自流大灌区看水,博物馆看场内古人类留
海归女硕士借5只华南虎,放养在非洲草原,19年过去它们回家了吗在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!前言在南非一处广茂的谷地之中,生活着一群特殊的物种。这里是一个人为与野生相互夹杂
专家踩个土工布下地观摩,何错之有?明星踩红毯没人喷,出门几十人围着造成交通拥堵没人喷,农业专家参加技术交流会踩个土工布下地被人喷,真是玩的好一手的双标。当地才下过雨,专家里不乏年龄大的人,用土工布防滑,也不至于搞一