spring整合mybatis
2023-01-22 22:46:46 1 举报
spring整合mybatis
作者其他创作
大纲/内容
ClassPathMapperScanner
getSqlSession().getMapper(this.mapperInterface)
sqlSessionProxy.<T> selectOne(statement)
重写isCandidateComponent方法只要是接口且顶级类或者静态内部类则为true
MapperRegistry.getMapper
getSqlSession返回的是DefaultSqlSession如是select,最终会执行DefaultSqlSession.selectOne
MapperProxy.invoke
如是select,最终会执行sqlSession.selectOne,这个select就是前面步骤传过来的this,也就是SqlSessionTemplate
MapperFactoryBean的AutowireMode为byType,所以Spring会自动调用set方法,有两个set方法,一个setSqlSessionFactory,一个setSqlSessionTemplate,而这两个方法执行的前提是根据方法参数类型能找到对应的bean,所以Spring容器中要存在SqlSessionFactory类型的bean或者SqlSessionTemplate类型的bean
MapperFactoryBean.getObject
遍历扫描出来的bd
sqlSessionProxy为代理对象,对应代理逻辑SqlSessionInterceptor.invoke
registerBeanDefinitions
调用自定义的扫描器进行扫描(doScan)
注册includeFilters(所以类都返回true)
设置bd的构造方法参数、beanClass为MapperFactoryBean的Class、设置注入方式为byType
通过@MapperScan导入了MapperScannerRegistrar类(注解里面的子import注解导入的)
定义ClassPathMapperScanner
重写doScan方法,在父类doScan扫描后执行格外逻辑
0 条评论
下一页