2.mybatis-配置文件基本信息

概述

mybatis的配置文件主要有2种:

  • 核心配置文件,主要是一些开发环境变量。
  • 表配置文件(sql映射文件),配置数据库表与实体的映射信息与该表关联的sql。
    本篇文章主要介绍配置文件里面的一些标签。

核心配置文件mybatis-config

在mybatis框架中,所有的配置文件信息都被放在config配置对象中。
config对象何时被创建?
肯定是在处理xml文件的时候被创建的,也就是说需要跟进去这行代码:
在这里插入图片描述
这次的任务主要是看这些配置文件中的标签是如何被加载的。
在这里插入图片描述
内部执行了一个重载方法,参数为:输入流,开发环境,外部属性文件。
在这里插入图片描述
该重载方法,创建了一个xml文件的读取对象。这个对象对xmlparse进行了封装。创建对象是制定了资源,不做任何的业务工作。
具体的解析工作在调用parse.parse()的时候进行。
在这里插入图片描述
首先进行纠错,这也是一种必要的编程方式,逻辑之前先判错。
然后用parse对象解析出来configration标签节点。
在这里插入图片描述
这是一个根节点,从这里向下处理。可以用递归或者别的方法,解析出来其他的子标签。
在这里插入图片描述
接着看读取标签的解析函数:
在这里插入图片描述
把标签的内容依次读取到管理对象中。
这里以某个具体标签的读取为例子,如mappers:
在这里插入图片描述
这个标签的作用是帮助我们定位所有的sql映射文件的位置的:
在这里插入图片描述
里面有3种方式来定位文件:
在这里插入图片描述
还可以指定package标签,路径下的所有接口和sql配置文件将会产生映射关系。
在这里插入图片描述

继续打断点跟进去这个解析mappers的函数:

在这里插入图片描述
传进来的参数就是该标签包含所有内容的字符串。
在这里插入图片描述

读取的过程中,获得所有子标签进行遍历。
也就是我们的package标签。进入第一个判断中。
获得name属性,然后加载mapper文件,执行addmappers函数。
在这里插入图片描述
进入了config对象的该函数中,调用了mapper注册器的同名方法,跟进去看一下:
在这里插入图片描述
这里面的做的事情是把我们当前得到的信息放到一个map中去。

在这里插入图片描述
这里面用到了代理模式。接口式编程实际上就是代理模式的一种体现。
这个函数读取了包名下面的类,一般是mapper接口。
执行了addmapper方法。
在这里插入图片描述
进来之后先检查是不是接口,因为要用代理模式,必须是接口。
然后进行了一个重复的判断,不能读取重名的mapper。这里有防止多线程的味道。
接下来是用代理工厂,进行代理我们的mapper接口,跟进去看看,没啥东西。就是生成了接口的代理对象(用工厂命名不太好理解)。
在这里插入图片描述
回到上一级,就是把要代理的接口和代理工厂放到了一个已知的map里面去。
在这里插入图片描述
然后根据type的接口类型做一个注解的处理。但是demo没有注解。
然后做一个解析:
在这里插入图片描述

进来先把type变成字符串,就是1个:“interface com.xxx”的字符串。
然后检查是否是重复载入了。
没有重复载入的话,就去载入这个接口对应的xml文件。
在这里插入图片描述
在这里插入图片描述

为什么要强调接口名称要跟sql映射文件命名空间的名称是一样的,原因就在这里了,只有一样,才能根据接口去加载到xml文件。这里xml文件命名也是有规矩的,因为接下来解析的字符串要跟接口名字有关系:
在这里插入图片描述
然后去实现加载功能:
在这里插入图片描述
读取进来之后,xml解析器来解析这个sql映射文件的内容。
跟进去看一下:
在这里插入图片描述
进来还是先查重,一个sql映射文件在运行期间只能被加载一次。

首先解析mapper根目录标签:
在这里插入图片描述
然后加载sql映射文件中的内容:
在这里插入图片描述
以最多的sql语句的解析为例子。
在这里插入图片描述

在这里插入图片描述

接下来就会看到sql是怎么变成statement对象了。
在这里插入图片描述

40:24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值