如何解决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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!