springboot使用mybatis ,项目启动时报“Result Maps collection already contains value forxxx”的解决方案

原因分析:

 

 

 

这些代码因为是工具自动生成的,所以也没仔细检查.一个小小的错误,导致的。

 

 

 

解决办法:

 

先在网上搜索大概的解决方法是:

3.0有可能是在 重新生成实体类时,没有将 mapper中的 XML、Repository中的方法、Domain中的实体类,这三个文件夹中的文件删干净导致的,重复。

 

3.1 由于使用ibatisTempTestTableMapper.xml实现接口TempTestTableMapper.java中的方法的时候的id有重复的值,比如
    <select id="queryTempTestTableMap"    resultMap="TempTestTableResult"> 中的TempTestTableResult在一个xml文件中有两个这样的id,修改过来即可

 

 

 

3.2  user-mapper.xml如下

 

[html] view plain copy

 

 

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  3.  <mapper namespace="com.bmdc.dj.user.dao.UserDao">  
  4.      <resultMap type="user" id="userResult">  
  5.          <id property="user_id" column="USER_ID"/>  
  6.          <result property="login_name" column="LOGIN_NAME"/>  
  7.          <result property="real_name" column="REAL_NAME"/>  
  8.          <result property="password" column="PASSWORD"/>  
  9.     </resultMap>  
  10.     <insert id="add" parameterType="user">  
  11.      insert into users (user_id, login_name, real_name, password)13         values(#{user_id}, #{login_name}, #{real_name}, #{password})      </insert>  
  12.  </mapper>  

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  3.  <mapper namespace="com.bmdc.dj.user.dao.UserDao">  
  4.      <resultMap type="user" id="userResult">  
  5.          <id property="user_id" column="USER_ID"/>  
  6.          <result property="login_name" column="LOGIN_NAME"/>  
  7.          <result property="real_name" column="REAL_NAME"/>  
  8.          <result property="password" column="PASSWORD"/>  
  9.     </resultMap>  
  10.     <insert id="add" parameterType="user">  
  11.      insert into users (user_id, login_name, real_name, password)13         values(#{user_id}, #{login_name}, #{real_name}, #{password})      </insert>  
  12.  </mapper>  

其中,namespace是接口路径。

Mybatis.xml如下:

 

[html] view plain copy

 

 

 

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.  <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3.  <configuration>  
  4.    
  5.      <!-- 别名 -->  
  6.      <typeAliases>  
  7.          <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>  
  8.      </typeAliases>  
  9.       <mappers>      
  10.          <mapper resource="com/bmdc/dj/user/dao/user-mapper.xml" />      
  11.      </mappers>  
  12.  </configuration>  

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.  <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3.  <configuration>  
  4.    
  5.      <!-- 别名 -->  
  6.      <typeAliases>  
  7.          <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>  
  8.      </typeAliases>  
  9.       <mappers>      
  10.          <mapper resource="com/bmdc/dj/user/dao/user-mapper.xml" />      
  11.      </mappers>  
  12.  </configuration>  

 

  其他配置文件都正确,我就不写了。这样就会出现 Java.lang.IllegalArgumentException: Result Maps collection already contains value for XXX这个错误。

    解决办法是:删除Mybatis.xml中的<mappers>标签所有内容。因为如果user-mapper.xmlnamespace的接口在同一路径下,就不需要在mybaits.xml中再进行配置了。

修改后的Mybatis.xml如下:

[html] view plain copy

 

 

 

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.  <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3.  <configuration>  
  4.    
  5.      <!-- 别名 -->  
  6.      <typeAliases>  
  7.          <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>  
  8.      </typeAliases>  
  9.  </configuration>  

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.  <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3.  <configuration>  
  4.    
  5.      <!-- 别名 -->  
  6.      <typeAliases>  
  7.          <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>  
  8.      </typeAliases>  
  9.  </configuration>  


3.3 insert 中的parameterType部分,之前我写的是类名,后来改为完整的包名+类名就好用了,不过,这个问题,其实在之前的iBatise2.x,是允许这样写的,有些不解了,不过看来以后需要注意了,尽量都用完整的包名+类名

 

3.4 sql语句返回时,使用<select id="xxx" resultType="example"><resultMap id="example" type=“xxx”>相冲突导致的。将resulttype更改为resultmap即可解决该问题。

 

3.5  eclipse编译了一份在bin目录下,将bin目录或者WEB-INFclass目录清空即可

3.6  下载了个可以直接运行的eclipse 项目,再与之前的项目对比,好像也没什么不同。最后使绝招:代码对比工具,发现生成的PetMapper.xml多了几百行!原来是我在运行时没有把之前已经生成的PetMapper.xml删除掉,再次生成代码时,又附加了上去!所以在运行代码生成之前,要把以前已经生成的xml文件清掉,以防出错。

把网上搜到的解决办法一并贴出,方便自己以后查找错误。

我这里的解决办法是:

包路径配错了,前面说了代码是用工具自动生成的,所以生成resultType的配置和我真实项目的路径不一致造成的.

代码自定生成的路径:

 

 

 

修改成项目正确的路径:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值