MyBatis - Mappé Déclarations collection contient déjà de la valeur pour
J'ai eu des messages d'erreur suivants jeté lors de l'enregistrement du mappeur de classes sur mon serveur de démarrage,
[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)
J'ai utilisé les annotations pour mon mappeur interfaces et il n'y a pas de configuration xml.
Ci-dessous est mon UserMapper interface,
public interface UserMapper {
@Select("SELECT * FROM customer")
List<User> getAllUsers();
@Select("SELECT * FROM customer where userId = #{userId} ")
List<User> getAllUsers(Long userId);
}
OriginalL'auteur Lucky | 2016-05-07
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la cause du message d'erreur. Si vous avez le même nom de méthode, puis mybatis jette le
Mapped Statements collection already contains value
message d'erreur. Donc la solution est d'avoir différents noms de méthode pour différents mappeur de déclarations, même si les signatures de méthode sont différents.Donc, À mon mappeur de l'interface de la méthode noms deuxième
getAllUsers()
nom doit êtregetUserById();
. La même erreur est levée si vous avez le même nom de méthode dans l'un desmapper.xml
fichiers. Donc, il est obligatoire d'avoir unique des noms de méthode ou mappeur de l'espace de noms pour les différentes instructions sql pour mybatis de cette carte au moment de l'exécution.OriginalL'auteur Lucky
Dans mon cas, l'occurance était due à resultMaps ont été ajoutés à la Configuration après la plus de correspondance.
Par exemple:
Si nous observons MyBatis code source, puis sur
la configuration.addMappers(..) ..... parse() est exécutée.
org.apache.ibatis.générateur de rapports.annotation.MapperAnnotationBuilder.parse()
org.apache.ibatis.générateur de rapports.annotation.MapperAnnotationBuilder.parseStatement(Méthode)
Si il y a un problème avec l'analyse de la déclaration (qui s'est produite dans mycase que la déclaration a @ResultMap annotation, mais resultMap n'était pas prévu à la configuration.), la méthode est ajoutée dans INCOMPLETE_METHODS dans la configuration qui, plus tard, lève l'exception.
Sur l'ajout de resultMap de configuration avant de mapper, résolu
OriginalL'auteur hemantvsn
Pour certaines raisons, cette erreur est renvoyée lorsque j'ai eu un resultType ensemble d'une classe qui n'existe plus. Une fois que j'ai mis à jour la classe, le problème a été résolu. Je ne sais pas pourquoi cette erreur a été levée, mais peut-être vérifier votre resultTypes ainsi, si vous tombez sur ce.
OriginalL'auteur Rob
Cette réponse n'est pas directement pertinente pour la question, mais peut être utile pour d'autres personnes confrontées à une erreur similaire:
Cette erreur semble être levée lors de MyBatis trouve plusieurs définitions pour l'une des méthodes dans le mappeur. Dans mon cas, j'ai eu à la fois l'Annotation et d'une définition dans le XML pour une méthode. La suppression de l'une de ces résolu le problème.
OriginalL'auteur Hashken
Peut-être que votre type de paramètre est incorrect. comme resultType ou resultMap ,parameterType etc...
OriginalL'auteur glory zheng