Ich habe ein Java-Projekt, das MyBatis verwendet, um auf eine PostgreSQL-Datenbank zuzugreifen. Mit PostgreSQL können Felder einer neu erstellten Zeile nach einer INSERT
-Anweisung zurückgegeben werden, und ich möchte damit die automatisch generierten BIGSERIAL
neu erstellten Datensätze zurückgeben. Also ändere ich den insert
Befehl im XML, um das Feature von PostgreSQL zu verwenden, ein resultType="long"
Attribut zum <insert>
Tag hinzuzufügen, und in der Java Schnittstelle des Mappers setze ich die Einfügemethode so zurück, dass long
anstelle von void
zurückgegeben wird.Rückgabe von Werten aus MyBatis <insert> gemappte Methoden
Wenn ich versuche, dies zu tun, bekomme ich eine org.xml.sax.SAXParseException
sagen, dass Attribute "resultType" must be declared for element type "insert"
.
Nun, wenn ich die <insert>
Tag <select>
alles gut funktioniert ändern, aber es stört mich, dass ich <select>
-Tag verwenden, um eine INSERT
Anweisung auszuführen.
Gibt es eine Möglichkeit, Methoden auf <insert>
Tags abgebildet Ergebnisse zurückgeben, oder ist MyBatis nicht dafür entworfen, und ich sollte sie einfach als <select>
Tags behalten?
Ich sehe. Gibt es eine Möglichkeit, dies mit PostgreSQL 'RETURNING' Syntax zu verwenden? –
Sie können versuchen, add 'useGeneratedKeys =" true "keyColumn =" id "keyProperty =" id "'. Ich habe das nie benutzt, aber es sollte funktionieren. Keine Notwendigkeit, in der Abfrage zurück zu geben, lassen Sie diesen Job JDBC-Treiber und MyBatis tun. Weitere Informationen finden Sie unter [this link] (http://edwin.baculsoft.com/2010/12/beginning-mybatis-3-part-3-how-to-get-tables-generated-ids/). – partlov
OK, ich sah [diese Dokumente] (http://www.mybatis.org/generator/configreference/generatedKey.html) und es sieht so aus, als ob es im Wesentlichen die gleiche Sache - führt eine zweite Abfrage, um den Schlüssel abzurufen. Es ist auch nicht für PostgreSQL definiert, was sinnvoll ist - da Sie in PostgreSQL den Schlüssel von derselben Abfrage erhalten können, die die Zeile eingefügt hat. –