Spring5整合Mybatis出现 Mapped Statements collection already contains value for xxxx

Spring5整合Mybatis出现 Mapped Statements collection already contains value for xxxx,第1张

Spring5整合Mybatis出现 Mapped Statements collection already contains value for xxxx 出现错误提示映射文件已经存在value for xxx

 本人在使用Spring5集成Mybatis使用的时候,配置Mybatis以及spring5之后,运行spring测试类方法,程序报错:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:

Error creating bean with name ‘userMapper’ defined in file
[E:CodeProgramsIdeaProjectSSMConstructiontargetclassescomssmconstructionrepositoryUserMapper.class]:
Unsatisfied dependency expressed through bean property
‘sqlSessionFactory’;
nested exception is org.springframework.beans.factory.BeanCreationException: Error
creating bean with name ‘sqlSessionFactory’ defined in class path
resource [Spring-Config.xml]: Invocation of init method failed;
nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: ‘file
[E:CodeProgramsIdeaProjectSSMConstructiontargetclassescomssmconstructionrepositorybaseMapper.xml]’;
nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is ‘file
[E:CodeProgramsIdeaProjectSSMConstructiontargetclassescomssmconstructionrepositorybaseMapper.xml]’.

  Cause: java.lang.IllegalArgumentException: 
  Mapped Statements collection already contains value for com.ssmconstruction.repository.baseMapper.getTableColNameByDbNameAndTableName.

  please check com/ssmconstruction/repository/baseMapper.xml and file

[E:CodeProgramsIdeaProjectSSMConstructiontargetclassescomssmconstructionrepositorybaseMapper.xml]

 最终提示无法加载ApplicationContext对象,在查阅百度发现解决方案主要集中以下四种情况:

1、Mapper文件中存在重复的ID

解决方法:
检查mapper文件中是否存在相同的id名称

2、mapper文件中的参数类型以及返回值类型错误

解决方法:
检查属性参数以及返回值类型的时候,分为两种情况,一种是基本数据类型,Mabatis官方已经使用别名进行了处理,因此使用简写(非全路径,类名小写可以被识别)但是自定义数据类型没有在Mabatis配置文件中配置别名的时候使用了非全路径进行表示
以下参考Mabatis官方配置别名:

别名	映射的类型
_byte	byte
_long	long
_short	short
_int	int
_integer	int
_double	double
_float	float
_boolean	boolean
string	String
byte	Byte
long	Long
short	Short
int	Integer
integer	Integer
double	Double
float	Float
boolean	Boolean
date	Date
decimal	BigDecimal
bigdecimal	BigDecimal
object	Object
map	Map
hashmap	HashMap
list	List
arraylist	ArrayList
collection	Collection
iterator	Iterator

配置自定义别名扫描(参考官方文档):

类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:


  
  
  
  
  
  

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:


  

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:

@Alias("author")
public class Author {
    ...
}
3、在sqlSessionFactory中配置了多个xml地址

解决方法:
而不是使用通配符号进行处理(classpath:com/ssmconstruction/repository/*.xml)

   
    
    
        
        
        
    
4、在SqlSessionFactory中配置了mapperlocation而且也在mybatis配置类中配置了

本人出错地方 Mark一下

如下情况:

Mybatis配置

    
        
    
Spring ApplicationContext配置
   
    
    
        
        
        
    

这样配置导致的重复扫描Mapper,参考文档 mapperLocation属性
得知加载mapper的xml映射文件 ,配置该属性后全局配置文件可以不需要再配置,因此全部配置时会出现重复扫扫描

解决方法:
使用其中一种扫描方式即可!

 本人也是正在学习,如果以上有什么错误的地方,麻烦各位纠正,当让如果能帮到大家的话,也是很有幸了,谢谢!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5709760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存