通常出现此情况分四类情况:
1- classpath 路径配置错误
2- mapper 对应的 xml 没有编译解析到 发布包上
3- mapper的 SqlSessionFactoryBean 重新定义 没有set mapperLocations
4-*Mapper.xml 上的 nameSpace还有对应的实体是否匹配准确,可以耐心点,细心点检查
针对上四种情况,我以 springboot+mybatisplus 说明,主要说明前三情况,最后一种自己耐心检查
例如我的目录上存放xml的目录是 src/main/java/com/example/dao/mapper/
第一种情况:
例如我的命名方式为 **Mapper.xml
针对多modules 的 我的 classpath可以这么配置:
mybatis-plus.mapper-locations=classpath*:com/example/dao/mapper/*Mapper.xml
对于多目录可以采用双*匹配符代替
第二种情况:
在pom.xml上的 增加以下,以编译解析到发布包上
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
第三种情况
主要是因为配置了MybatisSqlSessionFactoryBean,然后框架并没有去读取属性文件或配置文件上的mybatis-plus.mapper-locations,好好检查下。
例如举例说明,配置MybatisSqlSessionFactoryBean 记得把xml路径和扫描包配置进去:
@Bean
public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() throws Exception{
MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
mybatisPlus.setDataSource(dataSourceMultiple(db1(), db2()));
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(false);
mybatisPlus.setConfiguration(configuration);
mybatisPlus.setPlugins(new Interceptor[]{
paginationInterceptor()
});
mybatisPlus.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
mybatisPlus.setTypeAliasesPackage(typeAliasesPackage);
return mybatisPlus;
}
注解:以上的两个对应以下,读取属性或配置文件的路径设置进去
@Value("${mybatis-plus.mapper-locations}")
private String mapperLocations;
@Value("${mybatis-plus.type-aliases-package}")
private String typeAliasesPackage;