Mybatis原理
2021-02-08 16:40:24 30 举报
各位大佬给点个赞啊,3个赞多一个文件数。
作者其他创作
大纲/内容
获取并缓存MapperMethodInvoker
queryFromDatabase()
创建一级缓存Key
MapperMethod.execute()
动态代理MapperProxy
mappedStatement.getBoundSql()
持有SqlSession对象
返回结果
getMapper
Configuration
交给执行器执行
StatementHandler
new RoutingStatementHandler()根据MappedStatement.getStatementType()返回Statement执行器
doQuery
newTransaction(创建事务)
模板方法模式
传入jdbc Statement对象
CachingExecutor
二级缓存执行器对原Executor执行包装
no
query()
openSessionFromDataSource()
SqlSession
代理Mapper
子类
Proxy.newProxyInstance()
yes
statement.execute
BaseExecutor.query
UserMapper
selectUser()
session获取MappedStatement#configuration.getMappedStatement(statement)
SimpleExecutor
默认简单执行器
相当于IOC容器获取Mapper代理
MapperMethodInvoker.invoke()
调用jdbc查询
执行Interceptor(过滤器)plugin方法
knownMappers.get(type)获取Configuration添加的MapperProxyFactory
构造StatementHandler
ResultSetHandler.handleResultSets()
代理模式
openSession
Executor
执行器
SqlSessionFactoryBuilder#build
命中key相关字段:statement的IDlimit 参数请求参数字段名环境ID
configuration.getEnvironment()(环境配置)
mapperProxyFactory.newInstance
configuration.newExecutor()根据策略配置执行器
调用session执行查询
策略模式
Object方法?
getMapper返回动态代理UserMapper
new MapperProxy()创建代理对象增强InvocationHandler
初始化连接
获取BoundSql对象
一级缓存存在数据?
结果处理映射
Transaction
ReuseExecutor
重用执行器
直接执行
装饰器模式
BaseExecutor
真正执行器
执行所有Interceptor的plugin方法
TransactionFactory(事务工厂)
SqlSessionFactory
configuration.getMapper
mapperRegistry.getMapper
执行代理MapperProxy的invoke()
BatchExecutor
批量执行器
返回代理对象
0 条评论
下一页