Mybatis基础支持层天空视角
2021-09-14 18:24:24 0 举报
Mybatis基础支持层上帝视角
作者其他创作
大纲/内容
sqlSession
类PooledDataSourceFactory
类UnpooledDataSourceFactory
类JndiDataSourceFactory
接口DataSourceFactory
PooledConnection中封装真正的数据库连接对象
实现了InvocationHandler接口,动态代理了close方法,关闭时是把连接对象放回连接池
组合了类PooledConnection集合
组合了类PoolState
需要修改数据源配置重新建立连接时调用
关闭所有数据库连接
所有PooledConnection对象设置为无效
情况activeConnections集合和idleConnection集合
forceCloseAll方法
类PooledDataSource实现DataSource接口
静态代码块复制驱动信息到成员变量
initializeDriver初始化驱动
configureConnection事务是否自动提交、事务隔离级别配置
类UnpooledDataSource实现DataSource接口
数据源
数据源模块
初始化数据源、事务隔离级别、事务提交方式
事务提交
事务回滚
实现类JdbcTransaction
事务的提交和回滚是空实现,是交给容器管理
实现类ManagedTransaction
接口Transaction
实现类JdbcTransactionFactory
实现类实现类ManagedTransactionFactory
接口TransactionFactory
事务管理模块
装饰器模式
实现类PerpetualCache-基本实现
实现类BlockingCache-阻塞版本的缓存装饰器
实现类FifoCache-先入先出的缓存装饰器
实现类LruCache-最近最少使用进行缓存清理的装饰器
实现类SoftCache
实现类WeakCache
接口Cache
重写了equals和hashCode方法,使用count、checksum、hashcode、updateList比较CacheKey对象是否相同
类CacheKey
缓存模块
通过JDK动态代理创建代理对象
组合了类MapperProxyFactory
所有配置信息会被解析成Configuration对象
组合了类Configuration
填充了MapperRegistry.knowMappers集合
key是Mapper接口对应的class对象,value为MapperProxyFactory工厂对象,可以为Mapper接口创建代理对象
addMapper方法
得到的是实现了Mapper接口的JDK动态代理对象
getMapper方法
类MapperRegistry
实现了InvocationHandler接口
invoke方法是代理对象执行的主要逻辑
cachedMapperMethod方法负责维护MethodCache这个缓存集合
类MapperProxy
SqlCommand记录了SQL语句的名称和类型
SqlCommand是MapperMethod中定义的内部类
组合了类SqlCommand
Mapper接口中对应方法的相关信息
处理Mapper接口中定义的方法的参数列表
记录了参数在参数列表中的位置索引与参数名称之间的对应关系
key是参数在参数列表中的索引位置,value是参数名称(可以用@Param注解指定)
组合了类ParamNameResolver
MethodSignature是MapperMethod中定义的内部类
组合了类MethodSignature
执行INSERT、UPDATE、DELETE、SELECT、FLUSH操作
INSERT、UPDATE、DELETE类型需要经过rowCountResult方法处理影响行数
execute方法
类MapperMethod
Binding模块
构造方法指定了要解析的Class对象
处理getter、setter方法
处理父子类方法重写冲突
处理字段
类Reflector
实现类DefaultReflectorFactory用于Reflector接口的创建和缓存
接口ReflectorFactory
处理字段、方法、变量的类型信息
类TypeParameterResolver
类DefaultObjectFactory中的create方法通过反射调用构造方法的方式实例化对象
接口ObjectFactory
PropertyTokenizer 解析属性表达式,实现了Iterator接口
PropertyNamer 方法名到属性名的转换
PropertyCopier 相同类型的两个对象之间属性值的拷贝
Property工具集
类MetaClass 使用Reflector和PropertyTokenizer对复杂属性表达式的解析,获取指定属性的描述信息
对象级别的元信息的处理,是对对象级别的封装,抽象了对象的属性信息
ObjectWrapperFactory负责创建ObjectWrapper
接口ObjectWrapper
类MetaObject
反射工具箱用于参数处理、结果映射
反射模块
setParameter 负责将数据由JdbcType转换成Java
getResult负责将数据由Java类型转换成JdbcType类型
接口实现的抽象类BaseTypeHandler,把非空数据的处理都交给了子类实现
类TypeHandlerRegistry用于类型处理器的注册
接口TypeHandler
类TypeAliasRegistry 别名注册
类型转换
适配器模式实现多日志框架的切换
ConnectionLogger
PreparedStatementLogger
ResultSetLogger
StatementLogger
BaseJdbcLogger
代理模式实现日志的打印-jdk动态代理
日志模块
Bootstrap ClassLoader负责加载JDK中的rt.jar
Extentsion ClassLoader负责加载jre/lib/ext中的jar包
CommonClassLoader继承自System ClassLoader
CatalinaLoader和ShareLoader两个类加载器的父类都是CommonClassLoader
Tomcat的类加载器
System ClassLoader负责从classpath环境变量中加载类文件
双亲委派模式 自底向上检测类是否已经加载、自顶向下尝试加载类
开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器
类加载器
getResourceAsURL
classForName
getResourceAsStream
mybatis类加载器ClassLoaderWrapper
工具类ResolverUtil 根据指定的条件查找指定包下的类
单例模式
作用:查找指定路径下的资源
JBoss6VFS
DefaultVFS
抽象类VFS虚拟文件系统
资源加载
类XPathParser封装了XPath、Document、EntityResolver
接口TokenHandler处理占位符
Dom+XPath解析xml文件
解析器模块
基础支持层
建造者模式
子类SqlSourceBuilder
接口SqlSource表示映射文件或注解中定义的SQL语句
类MappedStatement表示映射配置文件中定义的SQL节点
解析include节点 将include节点替换成sql节点中定义的SQL片段,占位符替换成真实参数
在insert、update节点中可以定义selectKey节点来解决主键自增问题
selectKey节点对应的KeyGenerator接口用于生成主键
先创建SqlSource对象后创建MappedStatement对象并添加到Configuration.mappedStatements集合中保存
方法processSelectKeyNodes负责解析selectKey节点
解析SQL节点
每个映射配置文件的命名空间可以绑定一个Mapper接口并注册到MapperRegistry中
绑定Mapper接口
XMLMapperBuilder.configurationElement()解析映射配置文件时引用到还未解析的节点就会解析失败并抛出异常
incompleteMethods集合
incompleteResultMaps集合
incompleteCacheRefs集合
incompleteStatements集合
XMLMapperBuilder.configurationElement()解析完成后还会调用parsePendingResultMaps、parsePendingCacheRefs、parsePendingStatements方法处理incomplete*集合
处理incomplete*集合
子类XMLStatementBuilder-具体建造者C
方法useNewCache负责创建Cache对象并添加到Configuration.caches集合保存(StrictMap<Cache>类型)
组合了类MapperBuilderAssistant
方法parse解析映射文件
解析cache节点
解析cache-ref节点
解析parameterMap节点-官网已标记废弃
解析resultMap节点
解析sql节点-依赖XMLStatementBuilder解析
子类XMLMapperBuilder-具体建造者B
方法parse负责解析mybatis-config.xml
解析properties节点并设置到XPathParser和Configuration的variables字段中
解析settings节点并设置到Configuration对象的对应属性中
解析typeAliases、typeHandlers节点并通过TypeAliasesRegistry、TypeHandlersRegistry进行注册
解析plugins节点并放入Configuration的拦截器链中
解析objectFactory节点并放入Configuration
解析environments节点并放入Configuration
解析databaseIdProvider节点并放入Configuration
解析mappers节点,依赖XMLMapperBuilder对象加载映射文件
子类XMLConfigBuilder-具体建造者A
子类MapperBuilderAssistant
子类ParameterMappingTokenHandler
子类XMLScriptBuilder
组合了类Configuration、TypeAliasRegistry、TypeHandlerRegistry
方法resolveAlias依赖TypeAliasRegistry解析别名
方法resolveTypeHandler依赖TypeHandlerRegistry查找指定的TypeHandler对象
方法resolveJdbcType
方法resolveResultSetType
方法resolveParameterMode
抽象类BaseBuilder-建造者接口
配置解析
参数映射
SQL解析
SQL执行
结果集映射
插件
Mybatis核心处理层
Mybatis
0 条评论
回复 删除
下一页