Jackie Tang

Results 44 comments of 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 报错位置: [ ![providermethod-dyn](https://cloud.githubusercontent.com/assets/13701989/24753845/8bbd18e4-1b06-11e7-99d9-06ea98acc15f.png) 有时间给看看呗,没有找到门道啊 示例代码在项目中的位置: ![package-mybati-spring](https://cloud.githubusercontent.com/assets/13701989/24753872/b7d9db92-1b06-11e7-9014-883b3701f14c.png)

@abel533 原来是SpecialProvider.class.newInstance();报错了: ![nosuchmethod-2](https://cloud.githubusercontent.com/assets/13701989/24754294/7a05aa42-1b08-11e7-8629-af7c14da886a.png) ![nosuchmethod-specialprovider](https://cloud.githubusercontent.com/assets/13701989/24754295/7a3ad866-1b08-11e7-87bd-10056bb26d15.png) 为什么呢?

今天在对比代码时发现一个: 上面报错项目中MappedStatement.java中sqlSource是tk.mybatis.mapper.provider.SpecialProvider 你给出的例子中却是org.apache.ibatis.scripting.xmltags.DynamicSqlSource 哪个地方的配置决定实例化哪个SqlSource呢? 有错的: ![providersqlsource-mybatis](https://cloud.githubusercontent.com/assets/13701989/24798252/9cbdb7d6-1bc7-11e7-9631-37287052691a.png) 正常的: ![dynamicsqlsource-mybatis](https://cloud.githubusercontent.com/assets/13701989/24798274/a9e2b0f6-1bc7-11e7-8691-a689726ad7e0.png)

@abel533 Mapper哪个地方配错了呢。和这个例子中除了class名字外,都是一样的呢?

@abel533 看看错哪了呢? 又比对了一遍了。都有配置的: mappers: ![mybatis-config](https://cloud.githubusercontent.com/assets/13701989/24829554/96ed6bfa-1ca6-11e7-94bc-96daac479b68.png) ![basepackages](https://cloud.githubusercontent.com/assets/13701989/24829544/6dc7d9ea-1ca6-11e7-8f91-f0a9b7d6d8c9.png) ![pom-dependency](https://cloud.githubusercontent.com/assets/13701989/24829546/7245d486-1ca6-11e7-90a9-f9c7ab0cf39d.png)

发现一个有意思地方: 我这边 通用mapper自动配置没有生效: 上面例子中spring 容器中有这些bean,我写的那个demo就没有 ![beans-abel](https://cloud.githubusercontent.com/assets/13701989/24830145/ae542336-1cb2-11e7-937b-1c09560be9c3.png)

@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上了