1. Führen Sie die SQL -Abfrage direkt aus:
1. Auszug aus Mappers -Dateien
<resultMap id = "acmodelResultmap" type = "com.izumi.inStancemodel"> <resultal column = "InstanceId" Property = "InstanceId" jdbctype = "varchar" /> <resultal column = "Instancename" Property = "Instancename" jdbctype = "varchar" /> < /> < /> < /> < /> < /> < /> < /> < /< /< /< /< /< /< /< /< /< /< /< /< /resultMapsMaps " resultType = "com.izumi.instancemodel"> $ {paramsql} </select>2. Auszug aus Dao
Öffentliche Schnittstelle SOMEDAO {LIST <Stankemodel> getInstancemodel (@param ("paramsql") String SQL);};3.. Dinge zu beachten
3.1: Die Parameter der bestandenen Methode müssen der folgenden Spezifikation folgen. "Wählen Sie XXX als InstanceID, xxx als Instanzenname aus .....", andernfalls kann MyBatis das Abfrageergebnis automatisch in ein Java -Objekt verwandeln.
3.2: Die Differenz zwischen #{} Syntax und $ {} Syntax in der Mappers -Datei:
Standardmäßig führt die #{} -Syntax dazu, dass MyBatis die Eigenschaft vorbereiteten Stellungen generiert und den Parameter vorbereiteten Stellungen (=?) Verwendet, um den Wert festzulegen. Wenn Sie unveränderte Zeichenfolgen in SQL direkt ersetzen möchten, können Sie $ {} verwenden.
Mit anderen Worten, wenn MyBatis #{} sieht, wird der Ansicht, dass Sie Variablen in SQL Werte zuweisen, genau wie in der JDBC -Programmierung, um die Befragungsmarkierungen Werte zuzuweisen (zum Beispiel wird MyBatis seinen Typ beurteilen und vor und nach automatisch einzelne Zitate hinzufügen). Wenn MyBatis $ {} sieht, ersetzt es es direkt durch den Wert der Variablen, ohne eine Verarbeitung durchzuführen.
Wenn Sie also $ {} verwenden, müssen Sie keine Attribute wie "jdbcType = varchar" wie #{} schreiben.
3.3: Ergebnistyp und resultmap
Gemäß der Schreibmethode in 1 kann der <resultMap> -Teil ohne sie gelöscht werden, da im nächsten <auswählen> der definierte Ergebnismap nicht verwendet wird, aber das Ergebnistyp wird verwendet.
Wir können also sehen, dass es zwei Möglichkeiten gibt, die Definition des Rückgabewerts von <Select> zu schreiben. Einer besteht darin, einen Ergebnismap zu definieren und sich dann auf diesen Ergebnismap zu beziehen. Der andere besteht darin, den Ergebnistyp direkt zu verwenden, um den Pfad einer Klasse anzugeben.
2. Batch -Insertion von Daten
1. Experience gibt an, dass die Verwendung von Einfügen in XXX -Werte (xx) (xxx) (xxx) effizienter ist als die Verwendung in XXX -Werte (xx), in xxx -Werte (xxx) einfügen, in xxx -Werte (xxx) einfügen.
2. Verwendung in MyBatis
2.1. Auszug aus der Mappers -Datei
<insert id="insertBatch" > insert into student ( <include refid="Base_Column_List" /> ) values <foreach collection="list" item="item" index="index" separator=","> (null,#{item.name},#{item.sex},#{item.address},#{item.telephone},#{item.tId}) </foreach> </einfügen>2.2. Auszug aus Dao
öffentliche Schnittstelle SOMEDAO {public void InsertBatch (@param ("list") List <Student> Studenten); }Detaillierte Erläuterung von MyBatis -Stapel -Einfügungsdaten
Schauen Sie sich zunächst die Batch mapper.xml -Datei an
<insert id="insertbatch" parameterType="java.util.List"><selectKey keyProperty="fetchTime" order="BEFORE"resultType="java.lang.String">SELECT CURRENT_TIMESTAMP()</selectKey>insert into kangaiduoyaodian ( depart1, depart2, product_name,generic_name,img, product_specification, Einheit, Genehmigung_Certificate, Hersteller, Marktpreis, VIPPRICE, Website, Fetch_time, productDesc) Werte <foreach collection = "list" item = "item" index = "index" separator = ","> ( #{item.depart1}, #{item.Depart2}, #{item.Prodname}, #{item. item. item. item. item.Pleme. #{item.img}, #{item.productSpecification}, #{item.unit}, #{item.approvalCertificate}, #{item.manufacturer}, #{item.marketprice}, #{item.vipprice}, #{item.website}, #{fetchTime}, #{item.productdesc} ) </foreach> </einfügen>In der Batch -Verarbeitung stellte ich fest, dass es mehrere Probleme gibt, die Aufmerksamkeit erfordern.
1. Erhalten Sie automatisch den Primärschlüssel. Fügen Sie die useGeneratedKeys = ”true” keyProperty = ”id” in Insert hinzu. Die beiden Eigenschaften der beiden Eigenschaften sind ungültig und können die Dateninsertion unterbrechen. Wenn es sich bei der ID um die Selbstverletzung der Datenbank handelt, können Sie nichts schreiben. Entfernen Sie das Primärschlüsselattribut in der eingefügten Anweisung und verwenden Sie es.
<selectKey keyProperty = "id" order = "vor" vor "resultType =" java.lang.Ineger "> SELECT last_insert_id () </selectKey>
HINWEIS: Das <SelectKey> -Tag kann nur in Insert vorhanden; Es ist nicht geeignet, <SelectKey> während der Stapelverarbeitung zu verwenden. Es ist am besten, den Primärschlüssel selbst zu erhöhen oder ihn anzugeben.
2. Die Einfügungszeit wird oben angezeigt. Ich benutze MySQL. Solange es sich um eine MySQL -Funktion handelt, kann sie verwendet werden. Die Einfügungszeit und der Primärschlüssel sind eine der MySQL -Funktionen. . .