Vor kurzem habe ich eine Batch -Importanforderung erstellt und das Stapel mehrere Datensätze in die Datenbank einfügt.
Lösung: Einen Listen -Sammlungsobjekt im Programm einkapseln und dann die Entitäten in die Sammlung in die Datenbank einfügen. Da das Projekt MyBatis verwendet, ist es geplant, MyBatis 'Foreach -Funktion für die Stapelinsertion zu verwenden. Während dieser Zeit habe ich den Fehler "SQL -Befehl nicht richtig beendet" gestoßen und schließlich gelöst und für zukünftige Überprüfung und Lernen aufgezeichnet.
Zunächst verwies ich auf die Informationen über MyBatis 'foreach online, wie folgt:
Foreach wird hauptsächlich beim Aufbau unter Bedingungen eingesetzt. Sie kann über eine Sammlung in SQL -Aussagen iterieren.
Die Attribute des Foreach -Elements enthalten hauptsächlich Element, Index, Sammlung, Öffnen, Trennzeichen und Schließen.
Element repräsentiert den Alias, wenn jedes Element in der Sammlung iteriert wird. Index gibt einen Namen an, der die Position darstellt, zu der jede Iteration während des Iterationsprozesses erreicht wird. Open repräsentiert, was mit der Aussage beginnt, Separator stellt dar, welche Symbole zwischen jeder Iteration als Trennzeichen verwendet werden, und Close repräsentiert, was mit endet. Das kritischste und fehlerhafteste Sache bei der Verwendung von foreach ist das Sammelattribut. Dieses Attribut muss angegeben werden, aber in verschiedenen Fällen ist der Wert des Attributs unterschiedlich. Es gibt drei Hauptsituationen:
1. Wenn der in einem einzelnen Parameter übergebene Parameter und der Parametertyp eine Liste ist, ist der Sammelattributwert die Liste
2. Wenn der in einem einzelnen Parameter übergebene Parameter und der Parametertyp ein Array ist, ist der Eigenschaftswert der Sammlung Array
3. Wenn mehrere Parameter übergeben werden, müssen wir sie in eine Karte einkapseln. Natürlich kann auch ein einzelner Parameter in eine Karte eingekapselt werden.
Dann wurde die folgende XML -Datei gemäß der Kopie geschrieben.
xxxmapper.xml Datei:
<einfügen id = "addsUpCity" parameterType = "java.util.list"> <selectKey keyproperty = "Cityid" order = "vor" resultType = "String"> <! Area_Desc, Sup_id, Stat) Werte <foreach collection = "list" item = "item" ideen = "index" trennungsseparator = ","> (#{item.cityId, jdbctype = varchar},#{item.cityCode, jdbctype = varchar},#{item.cityName, jdbctype = varchar},#{item .Areadesc, jdbcType = varchar},#{item.supid, jdbcType = varchar},#{item.stat, jdbcType = varchar}) </foreach> </insert>Nach dem Laufen wird jedoch weiterhin Fehler gemeldet, und die Fehlermeldung lautet wie folgt:
### SQL: Einfügen in t_ocl_supcity (City_id, City_code, City_Name, Area_Desc, Sup_id, Stat) Werte (?,?,?,?,?), (?,?,?,?
Das Kopieren von SQL und das Laufen in PL/SQL meldet auch den gleichen Fehler. Wie oben zu sehen ist, sind SQL -Anweisungen, die mit dem Batch -Insert ausgeführt werden, gleichwertig zu: in T_OCL_SUPCITY (City_id, City_Code, City_Name, Area_Desc, Sup_id, STAT) -Werte (?,?,?,? beispiellos. Wenn ich auf diesen Artikel zurückblicke, stellte ich fest, dass dies für MySQL und nicht für Oracle geeignet ist. Daher habe ich die XML -Datei geändert:
<einfügen id = "addsUpCity" parameterType = "java.util.list"> in t_ocl_supcity einfügen (City_id, City_Code, City_Name, aaten_desc, sup_id, stat) Wählen #{item.cityCode, jdbctype = varchar} City_code,#{item.cityName, jdbctype = varchar} City_Name,#{item.Areadesc, jdbctype = varchar} aible_desc,#{item.supid, jdbctype = varchar}} Sup_id,#{item.stat, jdbctype = varchar} statfrom dual </foreach>) a </insert>Durchlaufen.
In der Version von Oracle gibt es einige Dinge zu beachten:
1. In SQL gibt es keine Werte;
2. (Selece ...... von Dual);
3. Das Attribut des Separators im <Foach> -Tag ist "Alleinheitlich", und die Abfrage wird in die Ergebnismenge zusammengefasst.
Das obige ist eine schnelle Lösung für den Batch -Einfügenfehler von Oracle+MyBatis foreach Insert -Funktion, das Ihnen vom Editor vorgelegt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!