mybatis-流程
2021-05-21 14:46:26   32  举报             
     
         
 mybatis 的工作流程
    作者其他创作
 大纲/内容
 插件
  不同的executor不同的实现方式以simple为例
  1.SimpleStatementHandler2.PreparedStatementHandler3.CallableStatementHandler
  Configuration
  StatementHandler.query
  invoke
  Class mapperInterface
  MapperMethod#execute
  configuration.add(MappedStatement)
  doQuery
  SimpleExecutor
  一次开启一个statement
  返回
  handler.parameterize(stmt)
  XMLStatementBuilder#parseStatementNode
  getConfiguration
  mapper标签
  命中
  prepareStatement
  DefaultSqlSession#selectList()或update()
  db
  ReuseExecutor
  已sql位key缓存statement
  SqlSessionFactoryBuilder
  预处理操作具体执行的是上面创建的预处理方法
  处理执行结果类型转化ResultSetHandler的默认实现
  Configuration#addMapper
  是否开启缓存
  装饰器模式
  MapperProxy执行Executor
  CachingExecutor
  有配置2级缓存 对原先的执行器包装
  newTransaction
  创建font color=\"#ff0000\
  创建事务,这个是对数据库连接的封装
  knownMappers.get(type)之前addmapper时存的代理工厂类
  区别不同的配置方式的解析最终都会调
  调用Executor中的方法执行sql
  BaseExecutor抽象模板模式
  TransactionFactory
  配置解析ConfigurationMapperStatementParameterMappingResultMapping
  解析成MappedStatement
  return DefaultSqlSessionFactory(config)
  bindMapperForNamespace
  Executor
  sql的真正执行者
  根据配置策略创建Executor
  mapperRegistry.getMapper
  return new DefaultSqlSession
  创建font color=\"#cc0000\
  PreparedStatement.execute()
  执行具体预处理的方法
  一级缓存PerpetualCache
  DefaultResultSetHandler#handleResultSets
  未命中
  调父类初始化BaseBuildernew Configuration
  getMapper
  return DefaultSqlSession
  XMLConfigBuilder#parse
  mapperElement
  处理缓存
  解析/configuration标签
  代理模式
  buildStatementFromContext
  责任链模式
  BoundSql
  解析所有的一级标签。并存到configuration中,configuration中保存了所有标签对应的对象
  策略模式
  openSession
  SqlSession
  interceptorChain.pluginAll
  parseConfiguration
  doQuery或doUpdate
  查询操作,会找缓存更新操作会clear缓存
  configuration.getMapper
  返回MapperProxy代理类
  是
  configuration.newExecutor
  getMapper返回代理执行
  queryFromDatabase
  否
  new MapperProxy
  获取  MapperMethod并Map缓存起来
  参数处理属性映射参数映射动态sql
  根据不同的方法类型执行
  xml或者其他的配置mybatis-config.xmlMapper.xml
  SqlSessionFactory
  sql执行simpleExecutorBatchExecutorReuseExecutor
  StatementHandler
  openSessionFromDataSource
  核心层
  处理2级缓存
  继续注解的解析MapperAnnotationBuilder.parse
  new RoutingStatementHandler
  获取MappedStatement
  基础层日志缓存数据源/连接池事务反射......
  baseExecutor.query
  <plugins>标签解析成Interceptor对象放到InterceptorChain list中
  接口层SqlSession
  configuration.getEnvironment()
  BatchExecutor
  BaseExecutor
  结果映射简单映射关联映射延迟加载
  按照配的策略选择具体的执行模式
  判断需要执行sql区别object的本身方法和默认default方法
  MapperRegistry#addMapper
  CachingExecutor.query
  configurationElement
  调用jdbc的执行方法
  MapperProxyFactory
  Proxy.newProxyInstance
  根据配置决定创建哪一种预处理的类型
  XMLMapperBuilder#parse
  mapper的解析
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 