Dieser Artikel ist das Wissen über Probleme mit der Entitätsklasse und der Tabellenzuordnung in MyBatis, die Sie vom Herausgeber zu Ihnen gebracht haben. Das Erlernen dieses Tutorials kann uns schnell helfen, das Konfliktproblem verschiedener Feldnamen und Entitätsklassenattributnamen zu lösen. Freunde, die es brauchen, lasst uns einen Blick darauf werfen!
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; oder3. 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:
<? Der Wert des Namespace wird herkömmlicherweise auf den Paketnamen + SQL Mapping -Dateinamen eingestellt, so dass der Wert des Namespace garantiert ist, eindeutig zu sein
Zum Beispiel namespace = "me.gacl.mapping.orderMapper" ist me.gacl.mapping (Paketname) + ordermapper (ordermapper.xml -Datei, um das Suffix zu entfernen)
-> <Mapper Namespace = "me.gacl.mapping.orderMapper"> <!-Erhalten Sie ein Auftragsobjekt basierend auf der ID-Abfrage. 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. Daher kann der entsprechende Datensatz nicht abgefragt werden. Mit dieser Abfrage können wir normalerweise das gewünschte Ergebnis abfragen. This is because we will give the query a alias with the same alias as the entity class attribute name, so that the attribute name of the entity class and the field name in the query result can correspond one by one--><select id="selectOrder" parameterType="int" resultType="me.gacl.domain.Order">select order_id id, order_no orderNo,order_price price from orders where order_id =#{id} </select> <!- Erhalten Sie ein Bestellobjekt basierend auf der ID-Abfrage. Mit dieser Abfrage können wir das gewünschte Ergebnis normalerweise abfragen. Dies liegt daran <resultMap>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- column = "order_id"/> <!-Verwenden Sie das Ergebnis-Attribut, um nicht-primäre Schlüsselfelder zuzuordnen-> <resulting Eigenschaft = "orderno" column = "order_no"/> <result properation = "price" column = "order_price"/> <resulting property = "price" column = "order_price"/> <sergebnisse> </mukper>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 test2 {@Testpublic void byid () {) {SQLSession Session Session Session Session Session Session Session 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 -Identifikationsstring // Ausführen des Abfragebetriebs und automatisch einkapselt das Abfragelement in ein Auftragsobjekt aus. Tabelle // Nach der Verwendung von SQLSession SQL müssen Sie SQLSessionsqlSession.close () schließen; System.out.println (Order); // Druckergebnis: NULL, dh kein entsprechender Datensatz wurde gefunden} @Testpublic void testGeDById2 () {sqlSession sqlSession = mybatisutil.getSQLSession ();/*** map sql identifiziert. Die ordermapper.xml -Datei * Selectorder ist der ID -Attributwert des Select -Tags. Durch den ID -Attributwert des SELECT -Tags finden Sie die SQL, die mit dem ID -Attributwert des SELECT -Tags ausgewählt werden soll. Aufzeichnung mit ID 1 in der Bestellentabelle // Nach der Ausführung von SQL mit SQLSession müssen Sie SQLSessionsQlSession.close () schließen. System.out.println (order); // Druckergebnis: order [id = 1, orderno = aaaa, price = 23.0]}@testpublic void testGeDById3 () {SQLSession SQLSession = MyBatisutil.getsqlSession ()/*** map sqlSession = mybatisutil.getsqlSession (); Attribut des Mapper -Tags in der ordermapper.xml -Datei * SelectOrderResultmap ist der ID -Attributwert des SELECT -Tags. Durch den ID -Attributwert des SELECT -Tags kann die zu ausgeführte SQL gefunden werden*/String Anweisung = "me.gacl.mapping.orderMapper.SelectorderResultmap"; // Zuordnen des SQL -Identitätszeichens // Abfragebetrieb und automatisch einkapselt. Bestellungstabelle // Nachdem Sie SQLSession zur Ausführung von SQL verwendet haben, müssen Sie SQLSIsionsQlSession.close () schließen. System.out.println (order); // Druckergebnis: order [id = 1, orderno = aaaa, Preis = 23.0]}}}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: Zuordnen Sie die Eins-zu-Eins-Korrespondenz zwischen Feldnamen und Entitätsklassenattributnamen durch Zuordnung ab. Diese Methode verwendet die von MyBatis bereitgestellte Lösung, um die Zuordnungsbeziehung zwischen Feldnamen und Attributnamen zu lösen.