The Java – mybatis – mapped statements collection already contains values
When registering the mapper class when my server starts, I throw the following error message,
[artifact:mvn] 2016-05-07 11:39:21,708 [ERROR] org.mybatis.spring.mapper.Mapperfactorybean - Error while adding the mapper 'interface com.sample.mappers.UserMapper' to configuration. [artifact:mvn] java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.sample.mappers.UserMapper.getAllUsers [artifact:mvn] at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:802) [artifact:mvn] at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:774) [artifact:mvn] at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:598) [artifact:mvn] at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:300) [artifact:mvn] at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement(MapperAnnotationBuilder.java:313) [artifact:mvn] at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:128) [artifact:mvn] at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72) [artifact:mvn] at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:671) [artifact:mvn] at org.mybatis.spring.mapper.Mapperfactorybean.checkDaoConfig(Mapperfactorybean.java:81) [artifact:mvn] at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
I use annotations for my mapper interface and have no XML configuration
The following is my usermapper interface,
public interface UserMapper { @Select("SELECT * FROM customer") List<User> getAllUsers(); @Select("SELECT * FROM customer where userId = #{userId} ") List<User> getAllUsers(Long userId); }
Solution
I found the cause of the error message If you have the same method name, mybatis will throw an error message that the mapped statements collection contains a value Therefore, the solution is to set different method names for different mapper statements, even if the method signatures are different
So in my mapper interface, the second getallusers () name of the method name should be getuserbyid() If in any mapper If there is the same method name in the XML file, the same error will be thrown Therefore, you must provide a unique method name or mapper namespace for different SQL statements of mybatis to map it at run time