上图是mybatis 3.4.5版本jar的 结构图,接下来这个系列会顺着这个包的模块进行源码分析。
目录
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