RuYi框架-集成Mybatis-plus重复mapper扫描导致saveBatch报错

RuYi框架-集成Mybatis-plus后执行saveBatch报错

一、报错信息:

TableInfo not found for entity XXX

可能根因不一样,我是因为重复mapper扫描导致的,也有可能是扫描路径配置有问题等... 我这里只说下我遇到的原因和解决思路。请读者自行判断

二、问题根因:

mapper重复扫描

启动类上加了@MapperScan

image

RuYi框架 com.ruoyi.framework.config下面有一个MyBatisConfig

源码片段 这里也配置了扫描路径 导致mapper重复扫描冲突了
public static String setTypeAliasesPackage(String typeAliasesPackage)
	{
		ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
		MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
		List<String> allResult = new ArrayList<String>();
		try
		{
			for (String aliasesPackage : typeAliasesPackage.split(","))
			{
				List<String> result = new ArrayList<String>();
				aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
						+ ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
				Resource[] resources = resolver.getResources(aliasesPackage);
				if (resources != null && resources.length > 0)
				{
					MetadataReader metadataReader = null;
					for (Resource resource : resources)
					{
						if (resource.isReadable())
						{
							metadataReader = metadataReaderFactory.getMetadataReader(resource);
							try
							{
								result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
							}
							catch (ClassNotFoundException e)
							{
								e.printStackTrace();
							}
						}
					}
				}
				if (result.size() > 0)
				{
					HashSet<String> hashResult = new HashSet<String>(result);
					allResult.addAll(hashResult);
				}
			}
			if (allResult.size() > 0)
			{
				typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
			}
			else
			{
				throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		return typeAliasesPackage;
	}

三、解决:

1、将MyBatisConfig文件注释掉,只保留一个扫描路径

2、配置application.yml文件

mybatis-plus:
  type-aliases-package: com.ruoyi.**.domain
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  configuration:
	map-underscore-to-camel-case: true
	log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3、pom文件引入依赖

dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.3.1</version>
		</dependency>
posted @ 2025-05-08 08:54  skystrivegao  阅读(96)  评论(0)    收藏  举报