使用TKMapper报错’无法获取实体类xxx对应的表名!’
项目版本:
Spring boot 1.5.9
mybatis-spring-boot-starter 1.3.0
tk.mybatis 1.1.4
由于想使用TkMapper新特性,Example.builder这种流形式的,升级了tk.mapbatis版本到1.2.4,pom依赖如下:
<properties>
<mybatis.tk.version>1.2.4</mybatis.tk.version>
</properties>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mybatis.tk.version}</version>
</dependency>
然后随便找了个测试类测试下,如UserMapper,执行报错‘无法获取实体类User对应的表名’。检查User类,UserMapper,userMapper.xml,配置都正确。
查看TkMapper源码,发现未初始化EntityHelper类的如下代码
public static synchronized void initEntityNameMap(Class<?> entityClass, Config config) {
if (entityTableMap.get(entityClass) != null) {
return;
}
//创建并缓存EntityTable
EntityTable entityTable = resolve.resolveEntity(entityClass, config);
entityTableMap.put(entityClass, entityTable);
}
去官网看文档说明,作者写道如果启动类用@MapperScan注解,则需要使用tkmpper提供的,而不要用Spring的。
我的项目正好是在启动类中使用了@MapperScan,换成tkmapper,再启动测试类,一切OK!