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语句的参数里面,以及它的返回值是怎样变成我们所需要的对象的,都是在红色和紫色部分里面,也就是定义的部分。

相关文章
|
SQL 关系型数据库 MySQL
省市区管理sql数据表设计、以及全国省市区全部最新数据
省市区管理sql数据表设计、以及全国省市区全部最新数据
3515 0
省市区管理sql数据表设计、以及全国省市区全部最新数据
|
Java 数据库连接 Maven
springboot集成mybatis时提示找不到Mapper Bean
springboot集成mybatis时提示找不到Mapper Bean
|
JavaScript
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
9261 0
VUE之vxe-table高级表格(表格内增删改、导入、导出、自定义打印、列设置隐藏显示等)用法
|
前端开发 easyexcel Java
Java+EasyExcel实现文件导入导出,导入导出如此简单
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
15625 3
Java+EasyExcel实现文件导入导出,导入导出如此简单
|
运维 数据可视化 网络协议
Docker可视化工具Portainer的安装和使用
Docker可视化工具Portainer的安装和使用
17326 1
Docker可视化工具Portainer的安装和使用
|
存储 关系型数据库 API
必看!淘宝商品详情数据接口调用,助力商城上货实战全流程(仅供参考)
本文介绍了一个实战案例,通过调用淘宝商品详情数据接口,实现商品信息的自动获取与上架至自建电商平台。主要步骤包括需求分析、技术选型、接口调用、数据存储、自动上货及定时更新,旨在提升工作效率,减少人工操作。
|
缓存 中间件 Java
Web中间件——Tomcat中的BIO、NIO、APR模式
Tomcat在我们日常开发B/S项目时常常进行使用,当然在Spring全家桶中我们现在也是使用的内置tomcat,但是很多人可能不会对于tomcat进行深入性研究,其实在我们的产品进行性能提升时,web中间件的优化也是占有很大一部分,而tomcat中采用不同的模式对应的使用场景下性能也是不一样的,因此本篇文章将对于这几个模式进行简单讲解,后续我们会对于不同的模式进行配置方式讲解。
308 75
Web中间件——Tomcat中的BIO、NIO、APR模式
|
SQL 存储 Oracle
常用数据库优缺点比较
【7月更文挑战第23天】常用数据库优缺点比较
1297 11
|
XML Java 数据格式
基于Java+freemarker实现动态赋值以及生成Word文档
使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。
1198 0
基于Java+freemarker实现动态赋值以及生成Word文档