Mybatis 源码分析1

上图是mybatis 3.4.5版本jar的 结构图,接下来这个系列会顺着这个包的模块进行源码分析。

目录

annotations

binding

builder


annotations

这个包下面的类都是 @interface 修饰的注解。

(1)Arg

参数注解

(2)AutomapConstructor

表明自动映射的构造器

(3)CacheNamespace

缓存的命名空间

(4)CacheNamespaceRef

对一个缓存的引用

(5)Case

一个案例

(6)ConstructorArgs

表明构造器参数

(7)Delete

删除操作

(8)DeleteProvider

删除操作的提供者

(9)Flush

通过映射器接口提供刷新语句

(10)Insert

插入操作

(11)InsertProvider

插入操作的提供者

(12)Lang

(13)Many

查询的结果有多条

(14)MapKey

(15)Mapper

标记mybatis 映射器接口

(16)One

查询的结果只有一条

(17)Options

表示对缓存的处理策略

(18)Param

参数

(19)Property 

表明属性值

(20)Result 

结果封装

(21)ResultMap

结果集

(22)Results

结果

(23)ResultType

当使用select 查询语句时的结果集

(24)Select 

声明查询语句

(25)SelectKey 

查询的关键字

(26)SelectProvider 

查询的提供方法

(27)TypeDescrimitor 

类的鉴别器

(28)Update 

修改

(29)UpdateProvider 

修改提供者

binding

(1)BindingException 

声明一个绑定binding处理的Exception

(2)MapperMethod

映射器里面的具体方法

有一个重要的内部类 SqlCommand

其中的一个重要的属性就是SqlCommandType : 对应的就是增删改查以及刷新

public enum SqlCommandType {
  UNKNOWN, INSERT, UPDATE, DELETE, SELECT, FLUSH;
}

如果是UNKNOWN 就直接报错了

还有一个重要的内部类 MethodSignature

首先就是对返回结果的一个标识:returnMany,returnsVoid, returnsMap, returnsCursor

声明返回的类型 returnType

主要是通过配置文件类Configuration 得到映射器中具体方法的参数,及返回结果

(3)MapperProxy

这里是实现 InvocationHandler ,就是使用jdk 的动态代理

真正的执行方法就是:MapperMethod 的execute 方法

mapperMethod.execute(sqlSession, args);

(4)MapperProxyFactory

映射器代理工厂

(5)MapperRegistery 

它是将所有的映射器存储在一个map中。

Map<Class<?>, MapperProxyFactory<?>> 

查询具体的映射器:首先通过type 得到映射器的MapperProxyFactory ,存在的话,直接newInstance

判断指定的映射器是否存在

添加映射器,批量添加一个包下的全部映射器

builder

(1)BaseBuilder

抽象类,有三个基本的属性,Configuration 作为mybatis的全局配置,第一次加载后可以直接使用

TypeAliasRegistery 类别名注册器

TypeHandlerRegistery 类处理注册器

(2)BuilderException

声明的一个构建异常

(3)CacheRefResolver

缓存引用的解析器

(4)InCompleteElementException

继承自BuilderException

未完成元素异常

(5)InitializingObject

这个接口就是提供了一个初始化方法

(6)MapperBuilderAssit

映射器构造助手类

映射器构造的核心类

(7)ParameterExpression

参数解析,对mapper映射器中的参数表达式进行处理

(8)ResultMapResolver

结果集处理

(9)SqlSourceBuilder

sql的构造器

(10)StaticSqlSource

静态sql

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/103466033