myabtis执行流程
2022-04-14 12:14:35 0 举报
myabtis执行流程
作者其他创作
大纲/内容
execute()执行完,并不会返回结果,虽然sql已经执行完了。再调用resultSetHandler.handleResultSets返回结果
configuration.newResultSetHandler返回结果集责任链执行
executor.query
resulthandler对返回对象进程处理
MapperProxy
statementHandler责任链执行
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student selectById = mapper.selectById(\"1\");mapper是被代理的,代理处理类是MapperProxy
动态扩展1.可以发现这里走的都是同一个链,这里的链处理者三个Handler。2.可以在链式节点中对这三块的Handler做动态代理,做特殊的处理
sqlsession.selectOne
获取param值
BaseExecutor.query
创建statementhandler的过程
doQuery
this.selectList
DefaultSqlSession(SqlSession)
读取配置文件,mapper文件初始化SqlSessionFacotry
MapperProxy.invoke
configuration.newParameterhandler参数责任链执行
statementHandler
判断result返回的类型
一级缓存命中,直接返回
CacheExecutor
mapperMethod.execute
创建一级缓存Key,缓存的key是用mybaits唯一方法名+offset+limit+sql+参数集合的各个hashcode字符串累加保证唯一的。保证相同的sql+相同的参数可以打在同一缓存上
获取Connection代理类(代理的作用输出日志 执行的sql语句) 此时sql还未真正执行
MapperMethod
configuration.getMappedStatement获取MappedStatement(对应了一条sql)
SimpleExecutor
判断是select/delete/update方法
收藏
收藏
0 条评论
下一页