欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 源码阅读-SpirngBoot Mybatis 自动配置

源码阅读-SpirngBoot Mybatis 自动配置

2024/11/17 4:43:57 来源:https://blog.csdn.net/qq_43259860/article/details/141754452  浏览:    关键词:源码阅读-SpirngBoot Mybatis 自动配置

MybatisPlusAutoConfiguration

在这里插入图片描述

ObjectProvider#getIfAvailable

ObjectProvider为我们提供了拓展,我们可以自定义一些插件或者类型转换器,同时也可以定义一些Customizer用来配置SqlSessionFactoryBean,MybatisPlusProperties等。
通过源码我们可以看到最终调用的是DefaultListableBeanFactory#DependencyObjectProvider#getIfAvailable
那我们来看一个例子,比如我们自定义一个类型转换器:

@Component
public class CustomTypeHandler implements TypeHandler<Animal> {@Overridepublic void setParameter(PreparedStatement ps, int i, Animal parameter, JdbcType jdbcType) throws SQLException {}@Overridepublic Animal getResult(ResultSet rs, String columnName) throws SQLException {return null;}@Overridepublic Animal getResult(ResultSet rs, int columnIndex) throws SQLException {return null;}@Overridepublic Animal getResult(CallableStatement cs, int columnIndex) throws SQLException {return null;}
}

可以看到我们在MybatisPlusAutoConfiguration就能拿到这个TypeHandler,这是为我们保留的拓展点,方便我们进行自定义拓展,我们也要从中学习这种设计。
在这里插入图片描述

SqlSessionFactory 核心一环

SqlSessionFactory做的事情非常的多,我们慢慢来看。
首先一上来就创建了MybatisSqlSessionFactoryBean这个工厂:
在这里插入图片描述
接着把一些属性设置进了工厂:
在这里插入图片描述

接着调用了工厂的getBean方法:
在这里插入图片描述
在这里插入图片描述
然后又调用了afterPropertiesSet -> buildSqlSessionFactory:
在这里插入图片描述
在这里插入图片描述
之后又做了一个特别重要的操作就是,如果又Mapper.xml文件会创建MybatisXMLMapperBuilder进行Mapper.xml的解析:
在这里插入图片描述
我们重点关注MybatisMapperBuilderAssistant里面有很多方法协助完成整个工作。
在这里插入图片描述
在这里完成了XML的解析,生成了:
在这里插入图片描述
在这里插入图片描述
下面这三个方法我们一眼就可以看出它们的意图,完成没有做完的初始化工作:
在这里插入图片描述
至于为什么因为在刚开始初始化的时候如果抛出了IncompleteElementException就会进入IncompleteResultMap:
在这里插入图片描述
接下来就是,创建SqlSessionFactory 了:
在这里插入图片描述
我们可以看到MyBatais将所有东西全部都放到了Configuration中。
除了非常重要的SqlSessionFactory ,SpringBoot还为我们配置了SqlSessionTemplate,这里里面就提供了一些方法,让我们进行数据DDL操作:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com