1. Eins-zu-Eins-Verein
1.1. Anforderungen vorschlagen
Abfrageberichtinformationen basierend auf Klassen -ID (Informationen mit Lehrer)
1.2. Erstellen Sie Tabellen und Daten
Erstellen Sie eine Lehrertabelle und eine Klassentabelle. Hier gehen wir davon aus, dass ein Lehrer nur für das Unterrichten einer Klasse verantwortlich ist, daher ist die Beziehung zwischen dem Lehrer und der Klasse eine Eins-zu-Eins-Beziehung.
Tabellenlehrer erstellen (T_ID INT Primary Key Auto_increment, t_name varchar ()); Tabellenklasse erstellen (c_id int primärschlüssel auto_increment, c_name varchar (), lehrer_id int); ALTER -TABELLE -Klasse Einschränkung FK_Teacher_ID Fremd Key (lerner_id) referenzlehrer (t_id); In den Lehrer (t_name) einfügen ('Lehrer'); In den Lehrer (t_name) einfügen ('Lehrer'); In die Klasse einfügen (c_name, lehrer_id) Werte ('class_a',); In die Klasse einfügen (c_name, lehrer_id) Werte ('class_b', 2); Die Beziehung zwischen Tabellen ist wie folgt:
1.3. Entitätsklassen definieren
1. Lehrerklasse, Lehrerklasse ist die Entitätsklasse, die der Lehrertabelle entspricht.
Paket me.gacl.domain; /*** @Author Gacl* Definieren Sie die Entitätsklasse, die der Lehrertabelle entspricht // id ===> t_id private String -Name; // name ===> t_name public int getId () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } @Override public String toString () {return "lehrer [id =" + id + ", name =" + name + "]"; }}2. Klassenklasse, Klassenklasse ist die Entitätsklasse, die der Klassentabelle entspricht
Paket me.gacl.domain; /*** @Author Gacl* Definieren Sie die Entitätsklasse, die der Klassentabelle entspricht // id ===> c_id privater Zeichenfolge Name; // name ===> c_name /** * Es gibt ein Lehrer-Feld in der Klassentabelle, sodass ein Lehrerattribut in der Klassenklasse definiert ist, * wird verwendet, um die Eins-zu-Eins-Beziehung zwischen Lehrer und Klasse aufrechtzuerhalten. Durch dieses Lehrerattribut können Sie wissen, welcher Lehrer für diesen Lehrer für diese Klasse*/ Privatlehrer verantwortlich ist. public int getid () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } öffentlicher Lehrer Getteacher () {Return Teacher; } public void sachseacher (Lehrer) {this.Teacher = Lehrer; } @Override public String toString () {return "classes [id =" + id + ", name =" + name + ", lehrer =" + lehrer + "]"; }} 1.4. Definieren Sie die SQL Mapping -Datei classMapper.xml
<? 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 Mapping -Dateinamen eingestellt, so dass der Wert des Namespace garantiert eindeutig ist. Zum Beispiel namespace = "me.gacl.mapping.classMapper" ist me.gacl.mapping (Paketname) + classMapper (classMapper.xml Dateientfernung Suffix)-> <Mapper Namespace = "me.gacl.mapping.classmapper"> <! Gemeinsame Tabelle Abfrage auswählen * aus der Klasse C, Lehrer t WHERE C.TEACHER_ID = T.T_ID und C.C_ID =; ##. Führen Sie zwei Abfragen aus, die Sie aus der Klasse auswählen, wobei c_id =; // lehrer_id = select * vom Lehrer, wobei t_id =; // die oben erhaltene Lehrerin verwenden-> <!-Methode 1: verschachtelte Ergebnisse: Verwenden Sie eine verschachtelte Ergebniskarte, um die Teilmenge der doppelten gemeinsamen Ergebnisse zu verarbeiten, um die Daten der gemeinsamen Tabellenabfrage zu verkapseln (doppelte Daten entfernen) aus der Klasse C, Lehrer t, wo C.Teacher_ID = T.T_ID und C.C_ID und C.C_ID und C.C_ID und C.C_ID =-> <Selektions-id.tacher_ID = T.T_ID und C.C_ID =-> <Secly-id = "-Selektion" entfernen. parameterType = "int" resultMap = "classResultmap"> SELECT * Aus Klasse C, Lehrer t wonach c.teacher_id = t.t_id und c.c_id =#{id} </select> <!-resultMap verwenden, um die Eins-zu--er-Korrespondenz zwischen Entitätsklassen und Feldern zuzuordnen-> <ergebnismap type "me.gaccl. <id Property = "id" column = "c_id"/> <result properation = "name" column = "c_name"/> <assoziationseigenschaft = "lehrer" javatype = "me.gacl.domain Geben Sie ein, indem Sie eine andere SQL -Mapping -Anweisung ausführen. SELECT * aus der Klasse, wobei c_id =; Wählen Sie * vom Lehrer aus, wobei t_id = // der Wert von Lehrer_id ist, der aus der vorherigen Abfrage erhalten wurde-> <select id = "getClass" ParameterType = "int" resultMap = "classResultmap"> SELECT * SELECT * Aus der Klasse, wobei c_id =#{id} </select> <! type="me.gacl.domain.Classes" id="ClassResultMap"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" select="getTeacher"/> </resultMap> <select id="getTeacher" parameterType="int" resultType = "me.gacl.domain.teacher"> Wählen Sie T_ID ID, t_name Name vom Lehrer, wobei t_id =#{id} </select> </minkPer> Registrieren Sie ClassMapper.xml in Conf.xml -Datei
<mappers> <!- Registrieren Sie die Datei classMapper.xml. classMapper.xml befindet sich im Paket me.gacl.mapping, so
1.5. Schreiben Sie Unit -Testcode
Paket me.gacl.test; importiere me.gacl.domain.classes; import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlSession; import org.junit.test; public class test {@test public void testGetClass () {sqlSession sqlSession = mybatisutil.getSQLSession (); /** * MAP SQL Identification String, * me.gacl.mapping.classMapper ist der Wert des Namespace -Attributs des Mapper -Tags in der Datei classMapper.xml, * getClass ist der ID -Attributwert des SELECT -Tags. Die auszuführende SQL kann durch den ID -Attributwert des SELECT -Tags */String Anweisung = "me.gacl.mapping.classmapper.getClass"; // Mapping der SQL -Identifikationsstring // Ausführen des Abfragebetriebs und automatisch einkapitulieren. Tabelle // nach der Ausführung von SQL mit SQLSession SQLSession.close (); System.out.println (Clazz); // Druckergebnis: Klassen [id =, name = class_a, lehrer = lehrer [id =, name = lehrer]]} @test public void testgetClass () {sqlSession SQLSession = mybatisutil.getsqlSession (); /** * MAP SQL Identification String, * me.gacl.mapping.classMapper ist der Wert des Namespace -Attributs des Mapper -Tags in der Datei classMapper.xml, * getClass ist der ID -Attributwert des SELECT -Tags. Die auszuführende SQL kann über den ID -Attributwert der Auswahl -Tag */String Anweisung = "me.gacl.mapping.classmapper.getClass"; // Zuordnen der SQL -Identifikationsstring // Ausführen von Abfragebetrieb und automatisch einkapseligen Ergebnissen in den Klassen -Return -Class -Class -SQL. -SQLOSSECTE. SQLSession Um SQL auszuführen, müssen Sie SQLSession SQLSession.close () schließen; System.out.println (Clazz); // Druckergebnis: Klassen [id =, name = class_a, lehrer = lehrer [id =, name = lehrer]}} 1.6. Zusammenfassung der MyBatis-Eins-zu-Eins-Association-Abfrage
MyBatis verwendet das Association-Tag, um Eins-zu-Eins-Assoziationsabfragen zu lösen. Die Eigenschaften, die dem Association -Tag zur Verfügung stehen, sind wie folgt:
• Eigenschaft: Der Name der Objekteigenschaft
• Javatype: Der Typ des Objektattributs
• Spalte: Der entsprechende Feldname für Fremdschlüssel
• Wählen Sie: Verwenden Sie eine andere Abfrage, um das Ergebnis zu verkapseln
2. Eins-zu-viele-Assoziation
2.1. Anforderungen vorschlagen
Fragen Sie die entsprechenden Klasseninformationen gemäß ClassID ab, einschließlich Schülern und Lehrern
2.2. Erstellen Sie Tabellen und Daten
In der oben genannten Eins-zu-Eins-Korrelation-Abfrage
Erstellen Sie Tabellenstudent (s_id int primary key auto_increment, s_name varchar (20), class_id int); Einfügen in Schüler (s_name, class_id) ('student_a', 1); Einfügen in Schüler (s_name, class_id) Werte ('Student_B', 1); Values ('student_d', 2); in schüler einfügen (s_name, class_id) values ('student_e', 2); Einfügen in Schüler (s_name, class_id) values ('student_f', 2); 2.3. Entitätsklassen definieren
1. Schülerklasse
Paket me.gacl.domain; /*** @Author Gacl* Definieren Sie die Entitätsklasse, die der Schülertabelle entspricht // id ===> s_id privater Zeichenfolge Name; // name ===> s_name public int getId () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } @Override public String toString () {return "student [id =" + id + ", name =" + name + "]"; }} 2. Ändern Sie die Klassenklasse, fügen Sie ein List <Studel> -Studenten -Attribut hinzu und verwenden Sie ein List <Sudent> -Kollektionsattribut, um die Schüler der Klasse darzustellen, wie folgt:
Paket me.gacl.domain; importieren java.util.list; /*** @Author Gacl* Definieren Sie die Entitätsklasse, die der Klassentabelle entspricht // id ===> c_id privater Zeichenfolge Name; // name ===> c_name /** * Es gibt ein Lehrer-Feld in der Klassentabelle, sodass ein Lehrerattribut in der Klassenklasse definiert ist, * wird verwendet, um die Eins-zu-Eins-Beziehung zwischen Lehrer und Klasse aufrechtzuerhalten. Durch dieses Lehrerattribut können Sie wissen, welcher Lehrer für diesen Lehrer für diese Klasse*/ Privatlehrer verantwortlich ist. // Verwenden Sie ein List <Sudent> -Kollektionsattribut, um Schüler zu vertreten, die der Klassen -Privatliste <Student> -Studenten gehören. public int getid () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } öffentlicher Lehrer Getteacher () {Return Teacher; } public void sachseacher (Lehrer) {this.Teacher = Lehrer; } public void sachseacher (Lehrer) {this.Teacher = Lehrer; } public List <Student> getstudents () {Return Students; } public void setStudents (Liste <Studenten> Studenten) {this.students = Studenten; } @Override public String toString () {return "classes [id =" + id + ", name =" + name + ", lehrer =" + lehrer + ", student =" + student + "]"; }} 2.4. Ändern Sie die SQL Mapping -Datei classMapper.xml
Fügen Sie die folgenden SQL -Mapping -Informationen hinzu
<!-Abfragen Sie die entsprechenden Klasseninformationen gemäß ClassID, einschließlich Schülern und Lehrern-> <!-Methode 1: verschachtelte Ergebnisse: Verwenden Sie eine verschachtelte Ergebniskarte, um eine Untergruppe von wiederholten gemeinsamen Ergebnissen auszuwählen * aus der Klasse C, Lehrer T, Schüler S wobei C.Teacher_id = t.t_id und C.C_ID = S.CLASS_ID und C.C. resultMap="ClassResultMap"> select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id} </select> <resultMap type="me.gacl.domain.Classes" id="ClassResultMap"> <id property="id" column="c_id"/> <result property="name" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" javaType="me.gacl.domain.Teacher"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> </association> <!-- ofType Specifies the object type in the students collection--> <collection Property = "Studenten" vontype = "me.gaCl.domain.student"> <id Property = "id" column = "s_id"/> <resulting Properation = "name" column = "s_name"/> </collection> </result-collectionMap> <!- Methode 2: verschachtelte Abfrage zurück. Wählen Sie * vom Lehrer aus, wobei t_id = // der Wert von Lehrer_id ist, der von der vorherigen Abfrage ausgewählt wird type = "me.gaCl.domain.classes" id = "classResultMap"> <id Property = "id" column = "c_id"/> <result property = "name" column = "c_name"/> <Assoziation Property = "lehrer" column = "lehrer_id" javatype = "me.gacl.domaN.TeTeN.TeTeN.TeTer.TeTer.Teacher" Select "Select" association = "association" OFTYPE = "me.gaCl.domain.student" column = "c_id" select = "getstudent"> </collection> </resultMap> <select id = "getTeacher" parameterType = "int" resultType = "me.gacl.domain id = "getStudent" parameterType = "int" resultType = "me.gacl.domain.student"> Select S_id ID, S_Name Name von student WHERE CLASS_ID =#{ID} </select> 2.5. Schreiben Sie Unit -Testcode
Paket me.gacl.test; importiere me.gacl.domain.classes; import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlSession; import org.junit.test; public class test {@test public void testGetClass () {sqlSession sqlSession = mybatisutil.getSQLSession (); /** * MAP SQL Identification String, * me.gacl.mapping.classMapper ist der Wert des Namespace -Attributs des Mapper -Tags in der Datei classMapper.xml, * getClass ist der ID -Attributwert des SELECT -Tags. Die auszuführende SQL kann durch den ID -Attributwert des SELECT -Tags */String Anweisung = "me.gacl.mapping.classmapper.getClass"; // Mapping der SQL -Identifikationsstring // Ausführen des Abfragebetriebs und automatisch einkapitulieren. Tabelle // nach der Ausführung von SQL mit SQLSession SQLSession.close (); // Drucken Sie das Ergebnis: Klassen [id =, name = class_a, lehrer = lehrer [id =, name = lehrer], Schüler = [Schüler [id =, name = student_a], student [id =, name = student_b], student [id =, name = student_c]] system.out.println (clazz); } @Test public void testgetClass () {SQLSession SQLSession = myBatisutil.getSQLSession (); /** * MAP SQL Identification String, * me.gacl.mapping.classMapper ist der Wert des Namespace -Attributs des Mapper -Tags in der Datei classMapper.xml, * getClass ist der ID -Attributwert des SELECT -Tags. Die auszuführende SQL kann durch den ID -Attributwert des SELECT -Tags */String Anweisung = "me.gacl.mapping.classmapper.getClass"; // Mapping der SQL -Identifikationsstring // Ausführen des Abfragebetriebs und automatisch einkapitulieren. Tabelle // nach der Ausführung von SQL mit SQLSession SQLSession.close (); // Drucken Sie das Ergebnis: Klassen [id =, name = class_a, lehrer = lehrer [id =, name = lehrer], Schüler = [Schüler [id =, name = student_a], student [id =, name = student_b], student [id =, name = student_c]] system.out.println (clazz); }} 2.6. Zusammenfassung der MyBatis One-to-Many Association-Abfrage
MyBatis verwendet das Sammel-Tag, um Eins-zu-Viele-Assoziationsabfragen zu lösen, und das Attribut von Typen gibt den Objekttyp der Elemente in der Sammlung an.
Über MyBatis Learning Tutorial (v) - Ich werde Ihnen so viel über die Implementierung von Association Table -Abfrage vorstellen. Ich hoffe, es wird Ihnen hilfreich sein!