Mybatis流程
2021-04-07 21:21:33 7 举报
Mybatis的运行流程简图
作者其他创作
大纲/内容
DefaultSqlSession
TypeHandler
Mybatis插件的四大扩展点(参考:拦截器链 Configuration.newXXX方法) Executor StatementHandler ParameterHandler ResultSetHandler
MapperProxy: 对于Mapper接口中的非默认方法,invoke的时候会带上sqlSession参数, 根据MapperMethod的类型(增删改查/Flush)调用SqlSesion的对应方法
ResultSetHandler
一级缓存(同一个对象引用) PerpetualCache
二级缓存(序列化出一份新的,所以注意对象需要实现序列化接口)
ParameterHandler
UserMapper
CachingExecutor
StatementHandler
SimpleStatementHandlerPreparedStatementHandlerCallableStatementHandler
CacheKey: hashcode:checksum:mappedStatement语句id:分页起始:分页结束:参数:[环境标识]比如: 1007042588:778236531:com.example.demo.UserMapper.selectUser:0:2147483647:select * from User where id = ?:1:development二级缓存装饰者模式: org.apache.ibatis.mapping.CacheBuilder#setStandardDecoratorsTransactionalCache --> SynchronizedCache --> LoggingCache --> SerializedCache --> ScheduledCache --> LruCache --> PerpetualCache
二级缓存配置:xml中的语句和注解的语句缓存为什么不是默认使用一个?@CacheNamespace和xml中的<cache>只能定义一处,因为两处解析,StrictMap不能重复。定义一处后,另外一处要Ref引用为同一个,也是因为两处分别解析(xml解析一次,anno解析一次)
BaseExecutor
0 条评论
下一页