Result Maps collection already contains value for xyx.dsw.dao.mapper.admin.quotationwish.TempTestTableMapper.TempTestTableResult
3.1 由于使用ibatis的TempTestTableMapper.xml实现接口TempTestTableMapper.java中的方法的时候的id有重复的值,比如
<select id="queryTempTestTableMap" resultMap="TempTestTableResult"> 中的TempTestTableResult在一个xml文件中有两个这样的id,修改过来即可
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.bmdc.dj.user.dao.UserDao">
- <resultMap type="user" id="userResult">
- <id property="user_id" column="USER_ID"/>
- <result property="login_name" column="LOGIN_NAME"/>
- <result property="real_name" column="REAL_NAME"/>
- <result property="password" column="PASSWORD"/>
- </resultMap>
- <insert id="add" parameterType="user">
- insert into users (user_id, login_name, real_name, password)13 values(#{user_id}, #{login_name}, #{real_name}, #{password}) </insert>
- </mapper>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.bmdc.dj.user.dao.UserDao">
- <resultMap type="user" id="userResult">
- <id property="user_id" column="USER_ID"/>
- <result property="login_name" column="LOGIN_NAME"/>
- <result property="real_name" column="REAL_NAME"/>
- <result property="password" column="PASSWORD"/>
- </resultMap>
- <insert id="add" parameterType="user">
- insert into users (user_id, login_name, real_name, password)13 values(#{user_id}, #{login_name}, #{real_name}, #{password}) </insert>
- </mapper>
其中,namespace是接口路径。
Mybatis.xml如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
- <typeAliases>
- <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>
- </typeAliases>
- <mappers>
- <mapper resource="com/bmdc/dj/user/dao/user-mapper.xml" />
- </mappers>
- </configuration>
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
- <typeAliases>
- <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>
- </typeAliases>
- <mappers>
- <mapper resource="com/bmdc/dj/user/dao/user-mapper.xml" />
- </mappers>
- </configuration>
其他配置文件都正确,我就不写了。这样就会出现 Java.lang.IllegalArgumentException: Result Maps collection already contains value for XXX这个错误。
解决办法是:删除Mybatis.xml中的<mappers>标签所有内容。因为如果user-mapper.xml与namespace的接口在同一路径下,就不需要在mybaits.xml中再进行配置了。
修改后的Mybatis.xml如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
- <typeAliases>
- <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>
- </typeAliases>
- </configuration>
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
- <typeAliases>
- <typeAlias type="com.bmdc.dj.user.domain.User" alias="user"/>
- </typeAliases>
- </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-INF下class目录清空即可
3.6 下载了个可以直接运行的eclipse 项目,再与之前的项目对比,好像也没什么不同。最后使绝招:代码对比工具,发现生成的PetMapper.xml多了几百行!原来是我在运行时没有把之前已经生成的PetMapper.xml删除掉,再次生成代码时,又附加了上去!所以在运行代码生成之前,要把以前已经生成的xml文件清掉,以防出错。
把网上搜到的解决办法一并贴出,方便自己以后查找错误。
我这里的解决办法是:
包路径配错了,前面说了代码是用工具自动生成的,所以生成resultType的配置和我真实项目的路径不一致造成的.
代码自定生成的路径:
修改成项目正确的路径: