源码阅读-SpirngBoot Mybatis 自动配置

MybatisPlusAutoConfiguration

在这里插入图片描述

ObjectProvider#getIfAvailable

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

@Component
public class CustomTypeHandler implements TypeHandler<Animal> {
    @Override
    public void setParameter(PreparedStatement ps, int i, Animal parameter, JdbcType jdbcType) throws SQLException {
    }

    @Override
    public Animal getResult(ResultSet rs, String columnName) throws SQLException {
        return null;
    }

    @Override
    public Animal getResult(ResultSet rs, int columnIndex) throws SQLException {
        return null;
    }
    @Override
    public 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操作:
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值