MyBatis源码
2021-11-19 18:45:28   20  举报             
     
         
 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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 