前言
错误场景开始是这样子的:
controller调用service,service实现类,三种写法:
- @Service,这种是默认首字母小写的方式。控制台提示找不到所调用的方法
- @Service(“testService”) 这种,就是把接口首字母小写。和上面其实一样。但是控制台提示,有相同名称的bean已存在
- @Service(“abc”) 这种,就是把bean的名称改为其他。可以调用成功。
周末遇到的这个问题。周一上午在群里稍微问了下,都没有人能解答。最多是检查一些配置。
晚上回来,各种百度,各种改配置。最后,还是用的以前用的方法:排除法。
1.首先,代码都已经提交过了。然后,把java代码全部删掉,结果还是保tkMapper的错。
2.然后把其他子工程的pom依赖复制过来,测试运行,成功。那么就是依赖问题。
3.这时候,把代码恢复。测试一下普通的接口,可以用。但是要解决的问题是为什么使用tkMapper会报错。
4.代码一点一点慢慢加,测试。最好就发现了文章标题的这个错误。mapper没有实例化。首先,启动类的确扫描到了,但是还是无法实例化,最好就试了下在mapper上面加@Mapper注解。这样是可以的。
/**
* 创建时间: 2019/11/23 ,文件由 Mybatis Generator 生成
*/
@Mapper
public interface BaseUserInfoMapper extends tk.mybatis.mapper.common.Mapper<BaseUserInfo> {
}
然后继续百度。
解决办法
试了又试,最好看控制台错误信息里面,提到mybatis,yml配置文件里,又配置了mybatis。前面试的时候,有把集成mybatis的jar添加到项目里,但是当时好像没成功! 或者是当时除了jar,还有yml错误。
结果:
- 依赖需要添加mybatis的jar。这两个都需要,缺一不可
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
- yml配置,两种都一样,都可以。重点是:mappers所扫描的包,对应的是自己的dao层。这个地方,可能每个版本配置的不一样?我上次大框架,这个地方配的是tk.mybatis.mapper.common.Mapper,就没报错。
第一种:
mybatis:
type-aliases-package: com.core.server.entity
dao-locations: classpath:dao/*.xml
configuration:
##开启驼峰
map-underscore-to-camel-case: true
##扫描基类接口
mappers: com.core.server.dao
identity: MYSQL
not-empty: false
第二种:
mybatis:
# 开启驼峰命名
configuration:
mapUnderscoreToCamelCase: true
mapperLocations: classpath:dao/*.xml
typeAliasesPackage: com.core.server.entity
mapper-locations: classpath:dao/*.xml
mapper:
mappers: com.core.server.dao
identity: MYSQL
结语
springboot2.1.9整合tkMapper。不是第一次整合了。上一次整合,就没出现这个问题,有点坑。
2019年11月25日21:47:45 完成!