Le retour des valeurs de MyBatis <insert> méthodes mappées
J'ai un projet en Java qui utilise MyBatis pour accéder à une base de données PostgreSQL. PostgreSQL permet de retourner les champs d'une nouvelle ligne après un INSERT
déclaration, et je veux l'utiliser pour retourner auto-généré BIGSERIAL
id
de nouveaux records. Donc, j'ai changer le insert
de commande dans le fichier XML à utiliser la fonctionnalité de PostgreSQL, ajouter un resultType="long"
attribut à la <insert>
tag, et dans l'interface Java de le mapper j'ai défini la méthode d'insertion de retour long
au lieu de void
.
Lorsque j'essaie d'exécuter ceci, j'obtiens une org.xml.sax.SAXParseException
dire que Attribute "resultType" must be declared for element type "insert"
.
Maintenant, lorsque je change la <insert>
tag <select>
tout fonctionne bien, mais ça me dérange que j'utilise <select>
balise pour effectuer une INSERT
déclaration.
Est-il un moyen de rendre les méthodes mappé à <insert>
étiquettes de retour des résultats, ou de MyBatis est pas conçu pour cela, et je dois le garder comme <select>
tags?
OriginalL'auteur Idan Arye | 2013-03-16
Vous devez vous connecter pour publier un commentaire.
Type de retour de mappés insérer la méthode peut être
void
ouint
(auquel cas il sera de retour le numéro de la ligne insérée). Vous pouvez effectuer les opérations suivantes mécanisme pour retourner l'id généré:Cela sera généré
id
colonne deid
propriété de votre paramètre de la classe. Après cela, l'objet passé en paramètre aura généréid
ensemble de ses biens.RETURNING
syntaxe?Vous pouvez essayer d'ajouter
useGeneratedKeys="true" keyColumn="id" keyProperty="id"
. Je n'ai jamais utilisé de cela, mais il devrait fonctionner. Pas besoin d'utiliserreturning
dans la requête, laissez ce travail ne pilote JDBC et MyBatis. Voir ce lien pour obtenir de l'aide.OK, j'ai regardé ces docs et on dirait qu'il fait essentiellement la même chose - exécute une seconde requête pour récupérer la clé. Aussi, il n'est pas défini pour PostgreSQL, ce qui est logique, puisque dans PostgreSQL, vous pouvez obtenir la clé de la même requête qui a inséré la ligne.
Fondamentalement, lorsque vous souhaitez exécuter la requête avec
returning
seule façon d'obtenir cette valeur est deResultSet
ce qui signifie que vous ne pouvez pas utiliserexecuteUpdate
qui est utilisé dans MyBatis<update>
. Donc il ne peut pas être exécutée avec<insert>
.Je vois. Du sens. Merci!
OriginalL'auteur
Vous pouvez utiliser comme suit. En xml
Dans la classe Java à partir de l'endroit où vous avez appelé la méthode pour insérer, vous pouvez obtenir la valeur en appelant
user.getUserId()
.Fondamentalement la prochaine val est stockée dans la variable de l'objet.
Here userId inside User.
OriginalL'auteur
Vous pouvez également utiliser des clés générées:
Après l'insertion, le paramètre a bien id la valeur de la colonne id.
OriginalL'auteur