如何解决Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X
这两天因为项目需要整合spring、struts2、mybatis三大框架,但启动的时候总出现这个错误,困扰我好久,在网上找到的答案都不是我想要的,今天终于知道原因了。
user-mapper.xml如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.bmdc.dj.user.dao.UserDao">
<resultMaptype="user"id="userResult">
<idproperty="user_id"column="USER_ID"/>
<resultproperty="login_name"column="LOGIN_NAME"/>
<resultproperty="real_name"column="REAL_NAME"/>
<resultproperty="password"column="PASSWORD"/>
</resultMap>
<insertid="add"parameterType="user">
insertintousers(user_id,login_name,real_name,password)
values(#{user_id},#{login_name},#{real_name},#{password})
</insert>
</mapper>
其中,namespace是接口路径。
Mybatis.xml如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--别名--> <typeAliases> <typeAliastype="com.bmdc.dj.user.domain.User"alias="user"/> </typeAliases> <mappers> <mapperresource="com/bmdc/dj/user/dao/user-mapper.xml"/> </mappers> </configuration>
其他配置文件都正确,我就不写了。这样就会出现Java.lang.IllegalArgumentException:ResultMapscollectionalreadycontainsvalueforXXX这个错误。
解决办法是:删除Mybatis.xml中的<mappers>标签所有内容。因为如果user-mapper.xml与namespace的接口在同一路径下,就不需要在mybaits.xml中再进行配置了。
修改后的Mybatis.xml如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--别名--> <typeAliases> <typeAliastype="com.bmdc.dj.user.domain.User"alias="user"/> </typeAliases> </configuration>
以上所述是小编给大家介绍的如何解决Mybatis--java.lang.IllegalArgumentException:ResultMapscollectionalreadycontainsvalueforX,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!