Comment retourner des ids sur Inserts avec mybatis dans mysql avec des annotations
- Voir cette question pour Postgres. Pour une raison quelconque, la solution ne fonctionne pas pour moi - la valeur de retour de l'instruction insert est toujours "1".
- Voir cette autre question pour un Basé sur XML solution. Je voudrais faire la même chose sans XML - l'insertion d'un enregistrement et de trouver de nouveaux auto-généré à l'id de l'enregistrement, j'ai juste insreted.
Je n'ai pas trouver un correspondant de l'annotation à <selectkey>
(voir ce question ouverte)
Comment dois-je procéder?
L'examen de mybatis code révèle que INSERT
est mis en œuvre par UPDATE
et toujours retourne le nombre de lignes insérées! Alors ... à moins que je sois complètement à côté de quelque chose ici, il n'y a aucun moyen de le faire en utilisant le courant (3.0.3) la mise en œuvre.
source d'informationauteur ripper234
Vous devez vous connecter pour publier un commentaire.
En fait, il est possible de le faire, avec la
@Options
annotation (si vous vous trouvez à l'aide de auto_increment ou quelque chose de similaire dans votre base de données) :Noter que le
keyProperty="idName"
partie n'est pas nécessaire si la propriété de clé dans SomeBean est nommé "id". Il y a aussi unkeyColumn
attribut disponible, pour les rares cas où MyBatis ne peut pas trouver la clé primaire de la colonne par lui-même. Veuillez également noter qu'en utilisant la@Options
vous soumettez votre méthode pour certains paramètres par défaut ; il est important de consulter la doc (lien ci-dessous -- page 60 dans la version actuelle) !(Ancienne réponse) L' (assez récente)
@SelectKey
annotation peut être utilisée pour les plus complexes de la clé de recherche (séquences, de l'identité (), fonction...). Voici ce que le MyBatis 3 Guide De L'Utilisateur (pdf) propose comme exemples :La
<insert>
<update>
et<delete>
déclarations de retourner le nombre de lignes affectées, comme cela est courant avec les Api de base de données.Si un nouvel ID est généré par la ligne insérée, elle se reflète dans l'objet passé en paramètre. Ainsi, par exemple, si vous appelez à mapper.insert(someObject) à l'intérieur de votre annoté de la méthode d'insertion, après l'insertion, vous pouvez appeler someObject.getId (ou similaire) pour le récupérer.
À l'aide des options de
<insert>
vous pouvez modifier la façon dont (en fournissant une instruction SQL) et le moment (avant ou après l'insertion), l'id est généré ou récupérées, et où, dans l'objet, il est mis.Il peut être intéressant d'utiliser le MyBatis générateur pour générer des classes à partir d'un schéma de base de données et avoir un regard sur la façon dont les insertions et mises à jour sont gérées. Plus précisément, le générateur produit un "exemple" les classes qui sont utilisées comme temporaire des conteneurs à passer autour de la data.
vous pouvez obtenir votre id générés à partir d'enregistrer des méthodes,
permet de dire qu'un haricot avec l'ID et le nom des propriétés,