mybatis原理
2021-09-26 11:33:11 5 举报
个人整理
作者其他创作
大纲/内容
MapperFactoryBean
sql类型,查询返回值,请求参数
继承关系
Class<T> mapperInterface
1
MapperAnnotationBuilder.parse()解析sql,参数、返回等值
methodCache缓存是否存在
继承<
MybatisConfiguration.class
PlainMethodInvoker.class
MapperMethod mapperMethod
MapperFactoryBean.class
mapper即代理对象
DefaultSqlSession
1、通过MappedStatement获取Configuration2、通过Configuration创建PreparedStatementHandler
mapperProxyFactory.newInstance(sqlSession)生成MapperProxy 代理对象
mvc调用
mapper注册工厂
是
SimpleExecutor
扫描MapperScan包下面的Mapper
默认的sqlSession
sqlSession.selectOne
execute()
InitializingBean
返回结果
2
执行 checkDaoConfig()生成Mapper
mybatis全局类
mapper的class
处理结果
DaoSupport
put到缓存
否
executor.query()
mapper方法拦截器,对应Mapper每个方法
mapper对应的方法
MapperRegistry mapperRegistry = new MapperRegistry(this)
MapperMethod
BaseExecutor
invoke()
Start
MapperProxy 实现 InvocationHandler
根据class获取mapper代理工厂getMapperProxyFactory != null
执行器类型,默认simple
PreparedStatementHandler
handler.query
StudentMapper
生成MapperFactoryBean的BeanDefinition
注册MapperScannerConfigurer.class
SqlSessionDaoSupport
每个Mapper对象的方法拦截器
doQuery()
spring启动加载FactoryBen
ExecutorType defaultExecutorType = ExecutorType.SIMPLE
根据类名称+ 方法名称通过Configuration获取MappedStatement对象
MapperProxy
@MapperScan@Import(MapperScannerRegistrar.class)
执行FactoryBean.getObject()获取代理对象
mapper代理对象 MapperProxy
1、获取BoundSql 2、创建缓存key3、缓存如果存在直接返回4、查询、然后缓存
根据查询类型调用不同方法
0 条评论
下一页