Jackie Tang
Jackie Tang
重新切了个分支:v1.0.0_tx 去掉通用mapper,只使用mybatis-spring-boot-starter,就可以正常使用了
重新启了一个Module,按照例子中操作了一遍。是ok的 我上面的那个项目中,那个地方的配置干扰了通用Mapper的初始呢? 奇怪
@abel533 反复把代码与这个例子比对了一下。没有发现错。跟了下代码,发现执行过程中传的参数都对 但还是报错了: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider 报错位置: [  有时间给看看呗,没有找到门道啊 示例代码在项目中的位置: 
@abel533 原来是SpecialProvider.class.newInstance();报错了:   为什么呢?
今天在对比代码时发现一个: 上面报错项目中MappedStatement.java中sqlSource是tk.mybatis.mapper.provider.SpecialProvider 你给出的例子中却是org.apache.ibatis.scripting.xmltags.DynamicSqlSource 哪个地方的配置决定实例化哪个SqlSource呢? 有错的:  正常的: 
@abel533 Mapper哪个地方配错了呢。和这个例子中除了class名字外,都是一样的呢?
@abel533 看看错哪了呢? 又比对了一遍了。都有配置的: mappers:   
发现一个有意思地方: 我这边 通用mapper自动配置没有生效: 上面例子中spring 容器中有这些bean,我写的那个demo就没有 
@abel533 感觉这是一个bug,看看是那个方面的原因导致的呢? 问题原因应该是:com.github.pagehelper.autoconfigure.MapperAutoConfiguration和 com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration 没有自动配置。 以MapperAutoConfiguration为例,Spring容器中是有SqlSessionFactory这个实例的,从下面的代码看,MapperAutoConfiguration 是应该会被自动配置,但实际情况是 ----- **没有实例化**: @Configuration @ConditionalOnBean({SqlSessionFactory.class}) @EnableConfigurationProperties({MapperProperties.class}) @AutoConfigureAfter({MybatisAutoConfiguration.class}) public class MapperAutoConfiguration {
@abel533 感觉问题出在MapperAutoConfiguration.java的Condition条件上了 看看是不是应该把MapperAutoConfiguration.java上的注解 @ConditionalOnBean({SqlSessionFactory.class}) 改成 @ConditionalOnClass({SqlSessionFactory.class}) MapperScan已经加过了。 @MapperScan放在启动的那个class CookbookApplication.java上了