MyBatis源码
2021-11-19 18:45:28 19 举报
MyBatis源码
作者其他创作
大纲/内容
解析namespace,cache,parameterMap,resultMap等标签
configuration#newExecutor获取执行器
MapperBuilderAssistant#addMappedStatement构建MappedStatement并添加到全局配置中
解析@Options@ResultMap等
Configuration#getMapper在初始化是添加的 MapperProxyFactory信息
XMLConfigBuilder#parse通过 xml 加载配置
MapperMethod#execute正在执行的方法通过SqlSession,并处理返回值
SqlSource#getBoundSql在执行时会获取 sql
Interceptor#plugin
MapperRegistry#getMapper
接口
#build
queryFromDatabase从数据库中获取
Configuration#addMapper处理接口
.MapperAnnotationBuilder#parseStatement解析每一个方法
InterceptorChain#pluginAll调用所有的拦截器对象plugin方法
XMLMapperBuilder#parse
先从一级缓存中获取
AnnotationBuilder#getSqlSourceFromAnnotations从注解中获取 sqlSource
BaseExecutor#doQuery默认SimpleExecutor
xml
解析properties等各种属性放入到Configuration中
MapperAnnotationBuilder#parse解析接口
XMLMapperBuilder#configurationElement真正解析 mapper.xml
XMLMapperBuilder#buildStatementFromContext解析 sql
.MapperAnnotationBuilder#buildSqlSourceFromStrings
ProviderSqlSource#getBoundSql通过反射获取执行 sql
MapperProxyFactory#newInstance生成代理对象
clearLocalCache情况一级缓存在当前 session 中第一次时会执行
.XMLLanguageDriver#createSqlSource创建 sql 对象
Provider
openSessionFromDataSource
插件只有在Configuration中调用newParameterHandlernewResultSetHandlernewStatementHandlernewExecutor是会进行代理生成新对象
MapperProxymapper核心,实际执行方法
SqlSourceBuilder#parse替换sql中的#{} 替换成问号, 并且会顺便拿到#{}中的参数名解析成ParameterMapping
没有找到
MapperRegistry#addMapper添加MapperProxyFactory到缓存中
SqlSessionFactory默认DefaultSqlSessionFactory
mapperElement解析mapper
如果为@Select,@Insert,@Update,@Delete
SqlSessionFactoryBuilder
DefaultSqlSession#getMapper获取 mapper
获取SqlSession
XMLStatementBuilder#parseStatementNode复杂的 xml 解析
创建ProviderSqlSource
openSession
parseConfiguration
Plugin#wrap先通过@Signature进行筛选过滤然后通过 jdk 动态代理,一层层的包装实现装饰器模式
Executor#query执行查询
0 条评论
下一页