Configuration和Mapper|学习笔记

简介: 快速学习Configuration和Mapper

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术Configuration和Mapper学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15946


Configuration和Mapper


紫色部分是配置信息,配置信息是在 MyBatis 运行的时候就需要读的。

image.png

在 MyBatis 中包含两个部分的配置信息:一个是 MyBatis本身的配置信息,我们在使用 Spring Boot的时候,这部分本身的配置信息是写在 application里面的;

另一个就是关于接口的信息,我们会用独立接口的 interface或者说用 interface对应的 xml文件去描述这些接口的配置信息。这两方面的配置信息会在 Spring框架去运行 MyBatis时全部读出来,两个配置信息里面如果有配错了的一部分内容,它在

实例化这些对象的时候会出错。

在 Spring的框架中,可以看到上面这个 Spring的 FactoryBean里面有一个属性叫做configuration,不是每一个属性都写的这个名字,但是所有指向 configuration的属性名字都叫做 configuration,代码里面都是这样的。所以在这个SqlSessionFactoryBean 中间是有一个 configuration的对象的,意味着当 Spring的框架运行MyBatis的时候,如果它带了MyBatis的包,就会去读所有 MyBatis的配

置信息,把它变成 configuration对象,就是这两类的配置信息,最后都是存在configuration 的对象。

在这两类配置信息的读取过程中,因为它是两种不同的格式,甚至有更多不同的格式,所以下面它分成了不同的 Builder。

可以看到它有一个 XMLConfigBuilder,它的配置信息是可以写成独立的 XML文件的,但都是比较早期的做法,如果形成独立的XML文件是需要通过XMLConfigBuilder 去读那个独立的 MyBatis配置文件的。那对于Mapper来说就有两种写法,一种是通过 XML去写,另一种是通过 Annotation去写,所以他有两个Builder,分别是用来去读 XML的配置信息,

就是 XMLConfigBuilder和MapperAnnotationBuilder,是用来去读写在 Mapper接口中间的配置信息的注解信息。所以无论是什么样的 Builder,最后读进来的都是

configuration。

configuration 读进来以后,以怎样的方式存储在这种 configuration对象中间呢?configuration 对象中也是有非常多属性的,但是今天讲关于 Mapper的这些配置,红色的部分就是Mapper的配置。

image.png

在 configuration中间,Mapper 的配置是写在了 MapperRegistry的对象中间,所以可以看到它有一条双向属性,就是它既是从 configuration指向了MapperRegistry,又是从 MapperRegistry指向 configuration。MapperRegistry中间存的是所有 Mapper的信息,所以可以看到它里面有一个属性叫做knownMapper,就是它知道的 Mapper读进去的,是用一个 Mapper的格式来存

的;这个白色的《Mapper》是类,不是对象,因为它只是一个接口的定义。JAVA反射机制里的类作为它的T,值就图中的是 MapperProxy Factory。它不把这个对象放到配置里面,因为在配置里面写的信息并不代表这个对象真正会用,我们经常

可能会写了很多的配置的 Mapper,但是其实可能没用到那些,就没有必要把Mapper实例画出来。它在驻入的时候把需要的Mapper的对象驻进去,如果没有驻入或者没有在任何地方要用到 Mapper就不需要把它实例画出来,所以它的 key是它的类,而它的 value就是 Mapper的ProxyFactory。

image.png

工厂对象准备用它来制造我们要驻进去的 Mapper对象,这是它的配置信息,红色部分就是要驻进去时候做的 Mapper的 Proxy,它不可能做出一个接口对象来,因为这个接口是在外面定义的,所以不可能用代码写出来一个 Mapper的对象。

它用的个 JAVA 的动态代理机制,当我们去调 Mapper的任何的一个方法时,都是调 MapperProxy 的方法去模拟实现接口的所有方法,所以它最后驻进去的是我们看到的 MapperProxy。

image.png

下面是 MapperProxy 如何去执行的一些相关的类,红色部分里面就是 Mapper的信息,而且我们所说的面向对象特征表现就是在这个 Mapper 和 configuration 里面,因为这两部分里面包含了它的 Mapper 和 method 的接口以及参数。

我们传进去的参数是如何映射到 Mapper定义中间的 SQL语句的参数里面,以及它的返回值是怎样变成我们所需要的对象的,都是在红色和紫色部分里面,也就是定义的部分。

相关文章
|
存储 JavaScript 开发者
Pinia和Vuex的区别
Pinia和Vuex的区别
2675 0
01PowerDesigner的安装与破解
01PowerDesigner的安装与破解
1522 0
|
JavaScript 前端开发 数据安全/隐私保护
Vue封装组件并发布到npm仓库
前言 使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的业务场景可能不同,开发人员还是得必须封装自己得组件,如果换了一个项目,那么我们就只能复制组件代码到新的项目里面去了,这样稍显麻烦,其实我们可以将组建上传到npm仓库,要用的时候可以直接从npm安装使用。 总结下来有两点好处: 方面使用,任何项目无缝衔接。 可作为开源项目,积累经验。
1175 0
Vue封装组件并发布到npm仓库
|
容器
echarts pie 文字格式改为可换行
echarts pie 文字格式改为可换行
1104 0
|
前端开发 JavaScript API
oss大文件上传
oss大文件上传
2324 6
|
弹性计算 自然语言处理 Windows
通义灵码 Visual Studio 下载安装指南(附安装包)
本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。
138967 21
|
JavaScript 开发者
彻底搞懂 Vue3 中 watch 和 watchEffect是用法
彻底搞懂 Vue3 中 watch 和 watchEffect是用法
|
JavaScript
vue3移动端自适应方案
【8月更文挑战第14天】
1344 7
|
前端开发 JavaScript 开发工具
从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南
从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南
3338 0
|
前端开发 开发者
基于.net8 和 Vue3 的前后端分离管理系统搭建
一款名为PurestAdmin的前后端分离系统,基于.net8和Vue3,实现了真正意义上的分离,服务端仅关注功能接口,客户端通过功能编码控制路由。选用Vue3提升交互体验,利用ABP框架保证后端性能。项目特点是无业务功能、单Token刷新、接口权限验证和在线用户管理。源码可在Gitee、GitHub找到,提供在线预览和文档支持。历经多次重构,旨在促进快速开发,降低框架搭建难度。
1380 1

热门文章

最新文章