SpringBoot整合Mybatis-Plus源码分析(二)

上文分析到调用
MybatisSqlSessionFactoryBean对象的getObject()方法,下面进行详细的分析该方法做的事情,首先判断该对象的成员属性SqlSessionFactory对象是否为空,很显然为空,则走到调用afterPropertiesSet方法进而调用buildSqlSessionFactory方法,该方法是getObject方法调用链的核心,下面给出部分代码截图:

 

可以看出该方法的中文注释,该方法主要就是创建一个SqlSessionFactory对象,判断configuration属性是否为空,该属性是MybatisConfiguration实例对象,它是Mybatis-Plus提供的类,继承自Mybatis包的Configuration对象,该类重写了原始Configuration对象一些方法,具体分析到调用该对象的方法时候再说,接着向下执行,截图如下:

判断是否有自定义别名包,如果有加载别名包里面的类,解析包里面的类添加到Class对象中,添加的过程排除自定义别名包里面的接口,然后调用MybatisConfiguration的getTypeAliasRegistry()方法获取TypeAliasRegistry对象然后调用TypeAliasRegistry对象的registerAlias方法,参数是Class集合对象中每一个元素,registerAlias对象方法截图如下:

 

registerAlias方法截图

获取type类的简单名称,判断class对象是否有Alias注解,如果有使用此注解名称覆盖type类的简单名称,如果没有使用type类的检查名称,把alias以key放到map中,value值是type对象,接着往下执行判断是否有插件数组,如果有插件则调用
targetConfiguration.addInterceptor方法添加到最终对象InterceptorChain成员属性interceptors集合中。接着判断是否有自定义的typeHandlers,如果有调用MybatisConfiguration的getTypeHandlerRegistry()方法获取TypeHandlerRegistry对象然后调用register方法,参数是TypeHandler对象,把自定义TypeHandler对象设置到typeHandlerMap的map数据上。接下来构建MybatisConfiguration对象的Environment属性,该成员属性id是MybatisSqlSessionFactoryBean的简单名称,

该成员属性TransactionFactory是
SpringManagedTransactionFactory,该成员属性dataSource是容器中的数据源,构建完Environment对象设置到MybatisConfiguration的Environment成员属性上,下面判断mapperLocations是否为空,如果不为空解析mapper.xml中的标签,关于此部分属于有一段解析crud的sql语句的逻辑,这正是Mybatis-Plus不用写增删改查的sql语句的原因,Mybatis-Plus已经帮我们处理了,整个部分我们下节详细分析,最后创建了一个DefaultSqlSessionFactory对象返回整个方法结束。

总结:
MybatisSqlSessionFactoryBean对象的getObject()方法的主要处理逻辑就是设置自定义相应的别名包中的类、自定义的java类和数据库映射的TypeHandler设置到MybatisConfiguration对象上,同时解析mapper.xml中的标签和CRUD的sql语句到MybatisConfiguration对象上,最后MybatisConfiguration对象设置到SqlSessionFactory对象成员属性上进行返回,这样就有了数据库各种的sql语句了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值