Le corps original de Mybatis est Ibatis, et maintenant il s'est séparé de la fondation Apache. Le nouveau site officiel est http://www.mybatis.org/.
Je ne connaissais pas l'utilisation magique de cette annotation avant d'étudier le code source MyBatis, mais quand j'ai vu qu'il y avait cette annotation lors de l'analyse du paramètre, j'ai compris que lorsque nous retournons des types comme Map <String, Map <String, Object >>, il est souvent difficile pour nous de le faire, car il peut s'agir de données de plusieurs tables, il est donc impossible pour nous de construire un autre modèle.
Ensuite, nous pouvons utiliser cette annotation
@Retention (RetentionPolicy.Runtime) @target (elementType.Method) public @Interface Mapkey {String Value ();}Il est évident que cette annotation est utilisée sur la méthode, et l'utilisation spécifique est de définir la clé de la carte externe. De cette façon, nous pouvons interroger des résultats très complexes sans créer une nouvelle entité.
PS: Jetons un coup d'œil à MyBatis en utilisant @mapkey annotation pour recevoir plusieurs enregistrements de requête dans la carte, afin d'obtenir facilement la valeur du champ à l'aide de la méthode get ().
Scénario d'exigence:
L'exécution par lots de plusieurs données de la base de données, y compris deux champs: ID et nom. J'espère que le résultat pourra être reçu directement à l'aide de la carte, puis la valeur du nom peut être facilement obtenue via map.get (id).
question:
Si vous utilisez le code suivant, s'il y a plusieurs résultats de requête, une erreur sera signalée, car MyBatis enregistre les résultats sur la carte sous la forme de ("ID": 123) et ("Name": "Jack"). Donc, si vous retournez le résultat, il est normal d'avoir un enregistrement comprenant l'ID et le nom; Si vous retournez plusieurs enregistrements, c'est-à-dire qu'il y a plusieurs ("id": 123) et ("id": 124), alors Mybatis sera stupide et ne sait pas comment y faire face.
Map <string, objet> m = abcdao.getNamesByids (idlist);
La solution consiste à utiliser une autre carte à l'extérieur:
Map <Integer, map <string, objet >> m = abcdao.getNamesByids (idlist);
Ensuite, ajoutez une annotation à cette méthode:
<span style = "blanc-espace: pre"> </ span> / ** <span style = "white-space: pre"> </span> * Obtenez le nom en lots basé sur plusieurs ID <span style = "Id" <space: "white-space: pre"> </ span> * @reurn <pany style = "white-space: pre"> </ span> * @return <span style = "white-space: pré"> </ span> * @rerning Style = "White-Space: pre"> </span> * / <span style = "White-Space: Pre"> </span> @mapkey ("id") <span style = "White-Space: Pre"> </span> Public Map <Integer, Map <String, objet >> getNamesByids (list <map <string, objet >> list);Cette annotation indique que la clé de la carte la plus externe est la valeur du champ nommé "ID" dans le résultat de la requête.
La configuration dans Mapper.xml est la suivante:
<select id = "getNamesByids" resultType = "java.util.map"> sélectionner id, nom from tb_abc où id dans <foreach item = "item" collection = "list" open = "(" séparateur = "," close = ")"> # {item.id} </ForEach> </lect>Ce qui précède est une explication détaillée de l'utilisation de @mapkey dans l'annotation MyBatis qui vous est présentée par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!