spring整合mybatis总结

总结

整个SpringBoot整合Mybatis的过程,核心就两点:如何对mapper的bean实例化和如何执行mapper。
Dao层对象交给Spring 容器管理,存放的是mapper代理对象

1.如何对mapper实例化bean

对mapper实例化bean,重点就是如何将mapper接口和mapper.xml映射文件的绑定,以及实例化mapper,具体分为两步。

1.1. 初始化

首先了解几个比较重要的类:

  • SqlSessionFactoryBean:用于生成SqlSessionFactory 的FactoryBean。
    • Configuration:存放所有mybatis配置信息,包括mapper接口、mapper.xml、 mybatis-config.xml等。
    • XMLConfigBuilder:解析 mybatis-config.xml 配置并存放到Configuration中。
    • SqlSessionFactoryBuilder:用于创建 SqlSession。
    • SqlSession:Mybatis工作的最顶层API会话接口,所有访问数据库的操作都是通过SqlSession来的。
  • SqlSessionTemplate:内部维护有 SqlSession 的代理对象,解耦Mapper和SqlSession的关键对象。
  • MapperScannerConfigurer:用于扫描所有mapper接口,并将mapper接口生成beanDefinition放到beanFactory的bean定义注册表中,然后再把beanDefinition中的mapper的beanClass转换成MapperFactoryBean,这么做是为了:第一,可以通过遍历bean定义注册表,找到mapper的beanDefinition,用于实例化bean;第二,可以通过MapperFactoryBean的getObject方法来实例化bean(通过jdk代理生成了bean的代理对象)。

初始化的过程,创建SqlSessionFactory、SqlSessionTemplate、MapperScannerConfigurer的bean定义,放到IOC容器(beanFactory)中,这是基础。在此过程,通过MapperScannerConfigurer扫描指定包下的所有mapper接口生成beanDefinition,并放到bean定义注册表中。

1.2. 实例化bean

第一步,使用SqlSessionFactoryBean来生成SqlSessionFactory。生成过程中,使用了XMLConfigBuilder、XMLMapperBuilder解析mybatis相关的xml配置,放到Configuration中,然后放到SqlSessionFactory里,把创建的SqlSessionFactory实例放到bean缓存池中。

第二步,使用使用SqlSessionTemplate构造器创建SqlSessionTemplate对象,其中用了jdk代理方式创建了SqlSession代理对象。需说明,SqlSessionTemplate采用单例模式,并通过TransactionSynchronizationManager中的ThreadLocal<Map<Object, Object>>保存线程对应的SqlSession(即DefaultSqlSession,这个不是线程安全的),实现session的线程安全。

第三步,通过MapperFactoryBean来实例化mapper接口,也是通过jdk代理方式创建的mapper代理对象,并把依赖的SqlSessionFactory和SqlSessionTemplate注入mapper中。

2.如何执行mapper

执行mapper方法的过程,主要是先通过两个代理类,即先执行mapper代理实现类MapperProxy的invoke方法,然后执行SqlSessionTemplate代理实现类的invoke方法,然后进入DefaultSqlSession相应方法中,这里会根据mapper的限定名获取MappedStatement,然后调用Executor相应方法,而Executor是封装了jdbc的操作,所以最终是通过jdbc执行sql,最后再把执行的结果解析返回。

综上所述,整个SpringBoot整合Mybatis的过程,就是在spring容器初始化的过程中生成mapper的代理对象,然后在执行mapper方法的过程,利用代理机制,执行目标方法,最终底层通过jdbc执行sql。

————————————————
版权声明:本文为CSDN博主「哼哼爸比」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013521882/article/details/120624374

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值