开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第43天,点击查看活动详情
周一总是没有精神上班
MyBatis包结构
不管是什么程序,或多或少会有可以配置的属性,绝大部分开源项目都提供了配置类,以供我们改变程序的行为。MyBatis也不例外。
MyBatis配置解析
MyBatis的配置类是Configuration,这个类包含了所有可以配置的属性来影响MyBatis的默认行为,它可以手动构建然后传给 SqlSessionFactoryBuilder。当然我们最常见的是通过将配置放在一个xml文件中,并用流的形式加载,其实最后也是转换成了Configuration对象,无非是MyBatis为我们做了而已,Configuration对象的部分属性如下所示。
要将xml的文件解析为属性,那么就应该有解析器支持,MyBatis提供的解析器和配置信息承载类有如下两种:
- 解析器类:提供配置的解析功能,负责完成配置信息的提取、转化。MyBatis中这样的类有 XMLConfigBuilder类、XMLMapperBuilder类、CacheRefResolver类和XMLStatementBuilder类等。
- 解析实体类:配置信息需要有个承载的对象,解析的实体类就是用来保存配置信息的,以Java的属性进行展示,这类类包含有Configuration类、ReflectorFactory类、Environment类、DataSource类、ParameterMap类、ParameterMapping类、Discriminator类和 SqlNode类等。
binding包
MyBatis要将Java中的方法和xml文件中的SQL语句进行映射,binding包就是用来将Java方法与 SQL语句之间绑定关系的包。binding包具有以下两个功能。
- 维护映射接口中抽象方法与数据库操作节点之间的关联关系;
- 为映射接口中的抽象方法接入对应的数据库操作。
binding包为我们提供了
MapperMethod类,将Java方法和XML中的SQL语句进行对应,MapperMethod中有两个重要的属性SqlCommand command和MethodSignature method,其中通过SqlCommand command可以获取MappedStatement,这个类里就保存了XML中原始的节点信息,最终会通过一系列的操作转换为SQL语句。他们的对应关系如下。这样Java方法就和XML中的SQL对应起来了。