In der Projektentwicklung begegnen wir häufig Situationen, in denen die Feldnamen in der Tabelle und die Attributnamen der entsprechenden Entitätsklassen der Tabelle möglicherweise nicht genau gleich sind. Der folgende Editor zeigt Ihnen, wie Sie das Konfliktproblem verschiedener Feldnamen und Entitätsklassen in diesem Fall lösen können. Interessierte Freunde werden zusammen lernen.
1. Bereiten Sie die Tabellen und Daten vor, die zur Demonstration verwendet werden sollen
Erstellen Sie Tabellenbestellungen (Order_id int Primary Key Auto_increment, Order_no varchar (20), order_price float); Werte einfügen (order_no, order_price) ('aaaa', 23); Einfügen in Bestellungen (order_no, order_price) Werte ('bbbbbbB', 33). 2. Definieren Sie Entitätsklassen
Paket me.gacl.domain;/*** @Author GaCl*Definieren Sie die Entitätsklasse, die der Bestellentabelle entspricht // id ===> order_idprivate String orderNo; // orderno ===> order_noprivate float price; // price ===> order_pricepublic int getid () {return id;} public void setId (int id) {this.id = id;} public String getOrderNo () {return orderNo;} public void setOrderno (String orderno) {this.orderno = orderNo; oder 3. Schreiben Sie den Testcode
3.1. Schreiben Sie eine SQL XML -Zuordnungsdatei
1. Erstellen Sie eine ordermapper.xml -Datei. Der Inhalt von ordermapper.xml lautet wie folgt:
<? xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org//dtd mapper ./en" http://mybatis.org/dtd/mybatis--mapper.dtd"><! Der Wert des Namespace wird herkömmlicherweise auf den Paketnamen + SQL -Kartendateinamen eingestellt, so dass der Wert des Namespace garantiert eindeutig ist. Zum Beispiel namespace = "me.gacl.mapping.orderMapper" ist me.gacl.mapping (Paketname) + ordermapper (ordermapper.xml Dateientfernung Suffix)-> <Mapper Namespace = "me.gacl.mapping.ordermapper"> <!-<!-
Basierend auf der ID -Abfrage wird ein Auftragsobjekt erhalten. Die Verwendung dieser Abfrage kann das gewünschte Ergebnis nicht abfragen. Dies liegt hauptsächlich daran, dass der Attributname der Entitätsklasse nicht dem Feldnamen der Datenbank entspricht, sodass der entsprechende Datensatz nicht abgefragt werden kann.
-> <select id = "getOrderById" parameterType = "int" resultType = "me.gacl.domain.order"> ausgewählt * Aus Bestellungen, wobei Order_id =#{id} </select> <! Basierend auf der ID -Abfrage wird ein Auftragsobjekt erhalten. Mit dieser Abfrage können wir normalerweise das gewünschte Ergebnis abfragen.
Dies liegt daran, dass wir den Abfrage -Alias mit demselben Attributnamen wie den Attributnamen der Entitätsklasse angeben, so dass der Attributname der Entitätsklasse und der Feldname im Abfrageergebnis einzeln zu einem zu eins entsprechen kann.
-> <select id = "selectorder" parameterType = "int" resultType = "me.gacl.domain.order"> order_id id, order_no orderno, order_price preis aus Bestellungen wobei order_id =#{id} </select> <!-- Nach der ID -Abfrage können wir ein Bestellobjekt erhalten. Mit dieser Abfrage können wir das gewünschte Ergebnis normalerweise abfragen. Dies liegt daran
<select id = "selectOrderResultmap" parameterType = "int" resultMap = "orderResultmap"> SELECT * Aus Bestellungen wobei Order_id =#{id} </select> <!-Zuordnung des Korrespondenzschließungsnamens der Entsprechungsklasse und dem Feld "Erregen des Entsprechungsklassens" -Feldesschließungsname und des Feldnamens der Tabelle. Der Feld-Feld-Nennenname durch die Tabellenname durch die Tabellenname durch die Tabellenname durch die Tabellenname durch die Tabellenname durch die Tabellenname durch die Tabellenname durch den Feld "Die Tabelle" Durch das Feld "Die Tabelle" Durch das Feld "Die Tabelle" Durch die Kartierung "Mapping"-MAKAPING-MAKE-MAKE-MAKE-MAKED-MAKE-MAKED-KAURDENZ. ID-Eigenschaft-> <id Eigenschaft = "id" column = "order_id"/> <!-Zuordnen des nicht primären Schlüsselfeldes mithilfe der Ergebnis Eigenschaft-> <resulting Eigenschaft 2. Registrieren
<mappers> <!- Registrieren Sie die ordermapper.xml-Datei. Die ordermapper.xml befindet sich im Paket me.gacl.mapping, so
3.2. Schreiben Sie Unit -Testcode
Paket me.gacl.test; import me.gacl.domain.order; import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlSession; import org.junit.test; public class test {@Testpublic void byid () {) {) {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{sqlsSession Session Session Session Session Session Session Session Session Session Session Session Session Session Session Sess MyBatisutil.getSQLSession ();/*** Die Identifikationszeichenfolge für die Zuordnung von SQL,* me.gacl.mapping.orderMapper ist der Wert des Namespace -Attributs des Mapper -Tags in der ordermapper.xml -Datei,* getOrderById ist der ID -Attributwert des Auswahl -Tags. Durch den ID -Attributwert des SELECT -Tags finden Sie die Ausführung von SQL*/String Anweisung = "me.gacl.mapping.orderMapper.getOrderById"; // Zuordnen der SQL -Identitätsstring // Ausführen des Abfragebetriebs und automatisch einkapselt. Durch Ausführung von SQL mit SQLSession müssen Sie SQLSESSIONSQLSession.close () schließen; System.out.println (order); // Druckergebnis: null, dh kein entsprechender Datensatz wird gefunden} @Testpublic void testGeDById () {sqlSession SQLSession = MyBatisutil.getSQLSession ();/*** MAP SQL SQL STICE,* ME.GECL.GECL.MADL.MASTRAGE. orderMapper.xml -Datei, * Selectorder ist der ID -Attributwert des SELECT -Tags. Durch den ID -Attributwert des SELECT -Tags finden Sie die zu ausgeführte SQL. */String Anweisung = "me.gaCl.maping.orderMapper.Selectorder"; // SQL Identification String // Abfragebetriebe ausführen und automatisch die Abfragergebnisse in ein Auftragsobjekt und Return Order order order = sqlSession.Selecton (Anweisung); // Abfragen Sie die Aufzeichnung mit ID -ID -Auftrag. SQLSESSIONSQLSession.close (); System.out.println (order); // Druckergebnis: order [id =, orderno = aaaa, price =.]}@Testpublic void testGorderById () {sqlSession SQLSession = mybatisutil.getSQLSession (); Mapper -Tag in der ordermapper.xml -Datei. * SelectOrderResultMap ist der ID -Attributwert des Select -Tags. Durch den ID -Attributwert des SELECT -Tags finden Sie die zu ausgeführte SQL. */String Anweisung = "me.gaCl.mapping.orderMapper.SelectorderResultmap"; // SQL Identification String // Abfragevorgänge ausführen und automatisch die Abfrageergebnisse in ein Auftragsobjekt und Rücksende der Auftragsauftrags -Auftrags -Auftrags -Auftrags -Auftrags -Auftrag. SQLSESSIONSQLSession.close (); System.out.println (order); // Druckergebnis: order [id =, orderno = aaaa, price =.]}} Ergebnisse der Ausführung von Unit -Tests:
1. Die Methode testgetOrderByID gibt nach Ausführung der Abfrage einen Null zurück.
2. Nach der Methode testgetOrderByID2 und der TestgetOrderByID3 -Methode können Sie das gewünschte Ergebnis normal ausführen.
4. Zusammenfassung
Der obige Testcode zeigt das Problem, dass, wenn der Attributname in der Entitätsklasse und der Feldname in der Tabelle inkonsistent ist, die entsprechenden Ergebnisse bei Verwendung von MyBatis für Abfragevorgänge nicht abgefragt werden können, und zwei Methoden werden für das Problem angewendet:
Lösung 1: Definieren Sie den Alias des Feldnamens in der Abfrage -SQL -Anweisung, so dass der Alias des Feldnamens mit dem Attributnamen der Entitätsklasse übereinstimmt, so dass der Feldname der Tabelle einzeln dem Attributnamen der Entitätsklasse entsprechen kann. Diese Methode löst die Zuordnungsbeziehung zwischen dem Feldnamen und dem Attributnamen, indem Alias in der SQL -Anweisung definiert wird.
Lösung 2: Kartieren Sie die Eins-zu-Eins-Korrespondenz zwischen Feldnamen und Entitätsklassenattributnamen über <resultmap>. Diese Methode verwendet die von MyBatis bereitgestellte Lösung, um die Zuordnungsbeziehung zwischen Feldnamen und Attributnamen zu lösen.
Das obige Tutorial von MyBatis Learning, das Ihnen vom Editor (IV) vorgestellt wurde - wie Sie den Konflikt zwischen Feldnamen und Entitätsklassenattributnamen schnell lösen können. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!