spring整合mybatis

整合入口 MybatisAutoConfiguration,registerBeanDefinition()s为扫描,sqlSessionFactory()为spring注入SqlSessionFactoryBean对象,其次注入SqlSessionTemplate对象,每个MapperFactoryBean又都持有SqlSessionTemplate,SqlSessionFactory中持有Configuration对象

扫描mapper接口作为Bean定义

扫描配置的mapper接口,并将这些mapper接口被beanDefinition置为MapperFactoryBean

org.mybatis.spring.mapper.ClassPathMapperScanner#processBeanDefinitions

解析mapper接口对应得xml文件

实例化每一个Mapper接口时,会在调用afterPropertiesSet方法,将mapper接口的代理工厂放入Configuration.MapperRegistry.knownMappers这个map对象中,然后将mapper接口对应的xml文件中sql语句解析放入Configuration.mappedStatements中

org.springframework.dao.support.DaoSupport#afterPropertiesSet

将Mapper的代理对象放入spring

实例化每个mapper对象时会调用MapperFactoryBean的getObject方法,在这其中又会将mapper的代理工厂MapperProxyFactory从knownMappers中取出,并调用其中newInstance方法创建出该mapper的代理对象MapperProxy,并将MapperProxy放入spring容器中

执行mapper中的接口方法

由于spring中存放的是mapper对象的代理对象,所以在执行时,便会执行MapperProxy中的invoke方法,cachedMapperMethod中会将mapper中的接口与mapper.xml中的sql进行映射,没有映射上就会报错,映射上了就进行缓存

然后执行其中的execute方法,然后便是执行SqlSession中的方法,由于spring要接管事物的管理,便对SqlSession做了一层代理

因此会先执行SqlSessionInterceptor中的invoke方法,看事物是否提交

以查询为例,执行sql会先从configuration.mappedStatements中取出sql申明,然后便是sql的具体执行流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值