1.Resultmap
In SQL -zugeordneten XML -Dateien werden alle SQL -Anweisungen platziert. Sie müssen einen Arbeitsbereich definieren, der im Allgemeinen als Pfad der entsprechenden Schnittstellenklasse definiert ist. Nach dem Schreiben der SQL -Anweisung -Zuordnungsdatei müssen Sie sie im Tag der MyBatis -Konfigurationsdatei -Mappers verweisen, z. B.:
<Mapper Resource = "com/liming/Manager/data/mappers/usermapper.xml"/> <mapper ressourcen ressourcen = "com/liming/Manager/data/mappers/lehreMapper.xml"/> </mappers>
Wenn sich die Java -Schnittstelle in einem relativen Pfad zur XML -Datei befindet, kann sie in Mappers der MyBatis -Konfigurationsdatei nicht deklariert werden.
SQL ordnet einige elementare Elemente von XML -Dateien ab:
(1). Cache konfiguriert Cache für ein bestimmtes Muster (2). Cache-Ref bezieht sich auf einen Cache aus einem anderen Muster (3). resultMap Dies ist das komplexeste, aber leistungsstarke Element, das beschreibt, wie Objekte aus dem Ergebnissatz (4) geladen werden. SQL Ein SQL -Block, der mit anderen Aussagen (5) multiplexiert werden kann. Karteneinfügungsanweisung einfügen (6). Aktualisieren Sie die Kartenaktualisierungsanweisung (7). MAP DELEETE Anweisung (8) löschen. Wählen Sie - Kartenauswählen Sie die Anweisung aus
1.1 resultMap
resultMap ist das wichtigste und mächtigste Element in MyBatis. Sie können 90% Ihres Codes sparen als mit JDBC -Ergebnissätzen oder Sie können viele Dinge tun, die JDBC nicht unterstützt. Tatsächlich kann Tausende von Codezeilen erforderlich sein, um eine komplexe Anweisung zu schreiben, die einer Kartierung entspricht, die einer Interaktion ähnelt. Der Zweck von Ergebnismaps ist eine so einfache Aussage ohne unnötige Ergebniszuordnung. Komplexere Aussagen erfordern nicht andere als nur einige unbedingt notwendige Aussagen, um die Beziehung zu beschreiben.
Ergebnismapattribut: Typ ist die Java -Entitätsklasse; ID ist die Kennung dieses Ergebnismaps.
Die Zuordnung dieses Ergebnismaps kann festgelegt werden:
(1). Der Konstruktor wird verwendet, um das Ergebnis eines instanziierten Klassenkonstruktors widerzuspiegeln
a) IDARG -ID -Parameter; Markieren Sie den Ergebnis als ID, um den globalen Anruf zu erleichtern
b) Durchschnittliche Reflexion mit dem Konstruktor
(2). ID -ID -Ergebnis, markieren Sie das Ergebnis als ID, um den globalen Anruf zu erleichtern
(3). Das Ergebnis spiegelt normale Ergebnisse auf javabäische Eigenschaften wider
(4). Assoziation die Kombination komplexer Typen; Arten von mehreren Ergebnissensynthese
a) verschachtelte Ergebniszuordnungen Mehrere Ergebnisse Karten verschachtelte Assoziationen selbst und können auch auf einen anderen verwiesen werden
(5). Sammlung eine Sammlung komplexer Typen
(6). Die verschachtelte Erkennung von Ergebniszuordnungen kann auch auf ein anderes verwiesen werden
(7). Diskriminator verwendet einen Ergebniswert, um zu entscheiden, welches Ergebnismap verwendet werden soll
a) Fallfallfall Fall der Ergebniskarte einiger Grundwerte
ich. verschachtelte Ergebniszuordnungen Ein Fallszenario ist selbst eine Ergebniskarte, sodass es auch einige der gleichen Elemente enthalten oder auf einen externen Ergebnismap verweisen kann.
1.1.1 ID, Ergebnis
ID und Ergebnis sind die einfachsten Zuordnungen, ID ist die primäre Schlüsselzuordnung. Ergebniskarten aus anderen grundlegenden Datenbanktabellenfeldern zu Entitätsklassenattributen.
Das einfachste Beispiel:
<resultMap type="liming.student.manager.data.model.StudentEntity" id="studentResultMap"> <id property="studentId" column="STUDENT_ID" javaType="String" jdbcType="VARCHAR"/> <result property="studentName" column="STUDENT_NAME" javaType="String" jdbcType="VARCHAR"/> <result Property = "studentSex" column = "student_sex" javatype = "int" jdbctype = "Integer"/> <resulting Property = "studentBirthday" column = "student_birtday" javatype = "Date" Jdbctype = "Date"/> <resulting Property = "studentphoto" columne jdbctype = "Blob" typeHandler = "org.apache.ibatis.type.blobTypeHandler" /> < /resultMap>
Details zur Konfiguration von ID- und Ergebnisanweisungseigenschaften:
Eigentum | beschreiben | |
Eigentum | Der Attributname, der dem Javabäer zugeordnet werden muss. | |
Spalte | Der Spaltenname oder der Label -Alias der Datentabelle. | |
Javatyp | Ein vollständiger Klassenname oder ein Alias vom Typ. Wenn Sie mit einem Javabäer übereinstimmen, erkennt MyBatis es normalerweise selbst. Wenn Sie dann auf eine HashMap abbilden, müssen Sie den Zweck des Javatyps angeben. | |
JdbcType | Eine Liste von Typen, die von der Datentabelle unterstützt werden. Diese Eigenschaft ist nur für Spalten nützlich, die beim Einfügen, Aktualisieren oder Löschen leer zulässig sind. JDBC benötigt dies, aber MyBatis nicht. Wenn Sie direkt für JDBC codieren und Spalten haben, die leer sind, möchten Sie dieses Element angeben. | |
Typhandler | Verwenden Sie diese Eigenschaft, um den Typprozessor zu überschreiben. Dieser Wert kann ein vollständiger Klassenname oder ein Alias vom Typ sein. |
<resultMap type = "studententity" id = "studentResultmap"> <constructor> <idarg javatype = "String" column = "student_id"/> <arg javatype = "String" column = "student_name"/> <arg javatype </resultmap>
Natürlich müssen wir die Konstruktormethode der Studententity Entity -Klasse definieren:
Public Studententity (String StudentID, String StudentName, String studentSex, Datum studentBirthday) {this.studentid = studentid; this.studentName = studentName; this.studentSex = studentSex; this.studentbirthday = studentBirthday; } 1.1.3 Assoziation
Das Gewerkschaftselement wird verwendet, um eine "Eins-zu-Eins" -Beziehung zu behandeln. Sie müssen die Eigenschaften der kartierten Java -Entitätsklasse und den Javatyp des Attributs angeben (normalerweise erkennt MyBatis es selbst). Der Spaltenname der entsprechenden Datenbanktabelle. Wenn Sie überschreiben möchten, geben Sie den Ergebniswert zurück, Sie müssen den TypeHandler angeben.
Verschiedene Situationen müssen MyBatis sagen, wie man eine Gewerkschaft lädt. MyBatis kann auf zwei Arten geladen werden:
(1). Wählen Sie: Führen Sie eine andere Zuordnungs -SQL -Anweisung aus, um einen Java -Entitätstyp zurückzugeben. Flexibler;
(2). ERGEBNISSMAP: Verwenden Sie eine verschachtelte Ergebniskarte, um Abfrageergebnissätze über Join zu verarbeiten und sie an Java -Entitätstypen zuzuordnen.
Zum Beispiel entspricht eine Klasse einem Klassenlehrer.
Definieren Sie zunächst die Attribute des Klassenlehrers in der Klasse:
Privatlehrerentität Lehrerentität;
1.1.3.1 Verwenden Sie SELECT zur Implementierung der Union
Beispiel: Es gibt das Attribut eines Klassenlehrers in der Kategorie Klassenentität. Wenn eine Klasseneinheit durch gemeinsame Anstrengungen erhalten wird, wird die Klassenlehrereinheit gleichzeitig zugeordnet.
Dies kann die ausgewählten Aussagen, die in der Datei ceenserMapper.xml definiert wurden, direkt wiederverwenden, um den Lehrer gemäß seiner ID abzufragen. Sie müssen die schriftlichen SQL -Anweisungen nicht ändern, Sie müssen den Ergebnismap nur direkt ändern.
Teil des Inhalts der Datei classMapper.xml:
<resultMap type = "classEntity" id = "classResultMap"> <id Property = "classId" column = "class_id" /> <resulting Eigenschaft = "className" column = "class_name" /> <resulting Eigenschaft = "classyar" column = "class_year" /> <Association probium id = "getClassById" parameterType = "String" resultMap = "classResultMap"> SELECT * From class_tbl CT wobei ct.class_id = #{classId}; </select>Teil der Datei von TeacherMapper.xml:
<resultMap type="TeacherEntity" id="teacherResultMap"> <id property="teacherID" column="TEACHER_ID" /> <result property="teacherName" column="TEACHER_NAME" /> <result property="teacherSex" column="TEACHER_SEX" /> <result property="teacherBirthday" column="TEACHER_BIRTHDAY"/> <result property="workDate" column="WORK_DATE"/> <result property="workDate" column="WORK_DATE"/> <result property="professional" column="PROFESSIONAL"/> </resultMap> <select id="getTeacher" parameterType="String" resultMap="teacherResultMap"> SELECT * FROM TEACHER_TBL TT WHERE TT.TEACHER_ID = #{teacherID} </select> 1.1.3.2 Verwenden Sie Ergebnismap, um die Gewerkschaft zu erreichen
Die gleiche Funktion wie oben besteht darin, die Klasse abzufragen und auch den Klassenlehrer abzufragen. Sie müssen Ergebnismap (in der XML -Datei des Lehrers definiert) in der Vereinigung hinzufügen, neue SQL schreiben (Abfragen Sie die klassenversorgte Tabelle mit der Lehrer -Lehrer -Tabelle) und benötigen keine Auswahl des Lehrers.
Ändern Sie den Inhalt der Datei classMapper.xml:
<resultMap type = "classEntity" id = "classResultMap"> <id Property = "classId" column = "class_id" /> <resulting Eigenschaft = "classname" column = "class_name" /> <resulting emity id = "getClassAndacher" parameterType = "String" resultMap = "classResultMap"> SELECT * Aus class_tbl ct links joinlyal_tbl tt auf ct.teacher_id = tt.teacher_id wobei ct.class_id = #{classId}; </select>Für die Teacherresultmap finden Sie den oben genannten Inhalt in der Datei ceursMapper.xml.
1.1.4 Sammlung
Aggregationselemente werden verwendet, um sich mit "Eins-zu-Viel-"-Beziehungen zu befassen. Sie müssen die Attribute der Zuordnungs -Java -Entitätsklasse, den Javatyp des Attributs (normalerweise ArrayList), angeben. die Art des Objekts in der Liste des Objekts (Java Entity -Klasse); den Spaltennamen der entsprechenden Datenbanktabelle;
Verschiedene Situationen müssen MyBatis sagen, wie eine Aggregation geladen werden soll. MyBatis kann auf zwei Arten geladen werden:
(1). Wählen Sie: Führen Sie eine andere Zuordnungs -SQL -Anweisung aus, um einen Java -Entitätstyp zurückzugeben. Flexibler;
(2). ERGEBNISSMAP: Verwenden Sie eine verschachtelte Ergebniskarte, um Abfrageergebnissätze über Join zu verarbeiten und sie an Java -Entitätstypen zuzuordnen.
Zum Beispiel hat eine Klasse mehrere Schüler.
Definieren Sie zuerst die Attribute der Schülerliste in der Klasse:
private Liste <Sudestentity> studentList;
1.1.4.1 Verwenden Sie SELECT zur Implementierung der Aggregation
Die Nutzung ist der Union sehr ähnlich. Der Unterschied besteht darin, dass dies eins zu vielen ist, so dass die zugeordneten Listen im Allgemeinen aufgeführt sind. Hier müssen Sie Javatype als ArrayList definieren. Sie müssen auch den Typ des Objekts in der Liste definieren, und der Anweisungsname des Auswahl, der festgelegt werden muss (es sollte angemerkt werden, dass die Auswahlanweisungsbedingung für den Abfragestudenten hier die fremde Schlüsselklasse sein muss).
Teil des Inhalts der Datei classMapper.xml:
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" select="getTeacher"/> <collection property="studentList" column="CLASS_ID" Javatype = "ArrayList" oftype = "Studententity" select = "getstudentByClassid"/> </resultMap> <select id = "getClassById" parameterType = "String" resultMap = "classResultmap"> select * from class_tbl ct wob </select>
Teil der studentMapper.xml -Datei:
<!-Java-Eigenschaften, Zuordnen der Definition zwischen Datenbanktabellenfeldern-> <resultMap type = "studententity" id = "studentResultmap"> <id Property = "studentID" column = "student_id" /> <resulting Property = "studentName" column = "columne column = "student_birthday" /> < /resultMap> <!-Die Schülerliste basierend auf Klassen-ID-> <select id = "getstudentByClassid" parameterType = "String" resultMap = "StudentResultMap"> <include Refid = "Selectstudentall" /> Where St.Class_ID = #{Class} < /select> /> 1.1.4.2 Verwenden Sie Ergebnismap, um die Aggregation zu erreichen
Mit einem Ergebnismap müssen Sie eine SQL, Links Join Student Table umschreiben.
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" resultMap="teacherResultMap"/> <collection property="studentList" column = "class_id" javatype = "arrayList" oftype = "studententity" resultMap = "studentResultmap"/> </resultMap> <select id = "getClassSandTeDeachStudent" Parametertype = "String" resultMap = "classResultmap"> select * von class_tbl ctls links links links links links links links links links links students students student Lehre_tbl tt auf ct.teacher_id = tt.teacher_id wobei ct.class_id = #{classId}; </select>
Für die Teacherresultmap finden Sie den oben genannten Inhalt in der Datei ceensMapper.xml. Bitte beachten Sie die StudentResultmap im obigen Abschnitt der Datei studentMapper.xml.
1.1.5Discriminator -Diskriminator <BR /> Manchmal kann eine separate Datenbankabfrage einen Ergebnissatz von vielen verschiedenen (aber hoffentlich einige Korrelations-) Datentypen zurückgeben. Das Diskriminatorelement ist für diese Situation ausgelegt, einschließlich der Erbschaftsarchie der Klassen. Der Diskriminator ist sehr leicht zu verstehen, da er sich ähnlich wie Switch -Aussagen in Java verhält.
Der Definitionsdiskriminator gibt Spalte und Javatyp -Eigenschaften an. In Spalten sucht MyBatis nach Vergleichswerten. Javatype ist der richtige Typ, um äquivalente Tests sicherzustellen (obwohl in vielen Fällen Zeichenfolgen nützlich sind).
Das folgende Beispiel ist, dass das ClassID -Attribut, wenn die ClassID 200001 ist, zugeordnet ist.
<resultMap type = "liming.student.Manager.data.model.studententity" id = "resultmap_studentity_discriminator"> <id Property = "studentid" column = "student_id" javatype = "String" jdbctype = "varcharchary"/> <sergebnis = "studentname" columname "columname" javat "javatyp"/> <resulting = "studentname" columnname "columname" javat "javatyp"/> <sergebnisse = "studentname" "columname" javat "javatyp"/> <result = "studentname" "columne jdbcType="VARCHAR"/> <result property="studentSex" column="STUDENT_SEX" javaType="int" jdbcType="INTEGER"/> <result property="studentBirthday" column="STUDENT_BIRTHDAY" javaType="Date" jdbcType="DATE"/> <result property="studentPhoto" column="STUDENT_PHOTO" javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache. jdbcType="VARCHAR"> <case value="20000001" resultType="liming.student.manager.data.model.StudentEntity" > <result property="classId" column="CLASS_ID" javaType="String" jdbcType="VARCHAR"/> </case> </discriminator> </resultMap>
2. Hinzufügen, Löschen, Ändern und Überprüfen, Parameter und Cache
2.1 auswählen
Ein ausgewähltes Element ist sehr einfach. Zum Beispiel:
<!-Abfragen Sie den Schüler nach ID-> <select id = "getstudent" parameterType = "String" resultmap = "studentResultmap"> Select St.Student_id, St.Student_Name, St.Student_sex, St.Student_Birthday, St.ClASS_ID von student_tbl student_tbl student_tbl standung
Diese Anweisung heißt 'getStudent, hat einen String -Parameter und gibt ein Objekt des Studententity -Typs zurück.
Beachten Sie, dass die Parameteridentifikation: #{studentID} lautet.
Wählen Sie Anweisung Attribut -Konfigurationsdetails:
| Eigentum | beschreiben | Erhalten Sie den Wert | Standard |
| Ausweis | In diesem Modus kann ein eindeutiger Kennung durch andere Aussagen verwiesen werden | ||
| Parametertyp | Der vollständige Klassenname oder Alias für den Parameter übergeben an diese Anweisung | ||
| Ergebnistyp | Die Anweisung gibt den gesamten Klassennamen oder Alias des Werttyps zurück. Beachten Sie, dass bei einer Sammlung der gesamte Klassenname oder Alias des Elements in der Sammlung hier und nicht der Klassenname der Sammlung selbst ausgefüllt wird. (Ergebnistyp und resultmap können nicht zusammen verwendet werden) | ||
| resultmap | Der referenzierte externe resultmap -Name. Das Ergebnis -Set -Mapping ist die leistungsstärkste Funktion in MyBatis. Viele komplexe Zuordnungen können leicht gelöst werden. (Ergebnistyp und resultmap können nicht zusammen verwendet werden) | ||
| Flushcache | Wenn der Cache auf True gesetzt wird, wird der Cache jedes Mal gelöscht, wenn die Aussage aufgerufen wird. Die Auswahlanweisung wird standardmäßig auf False festgelegt | wahr | falsch | FALSCH |
| usecache | Wenn es auf True gesetzt ist, wird der Ergebnissatz der Anweisung zwischengespeichert. Die Auswahlanweisung ist standardmäßig auf false fest gesetzt | Falsch falsch Durch Timeout wird die maximale Zeit festgelegt, die das Laufwerk auf die Antwort wartet, bevor sie eine Ausnahme ausgelegt hat. Der Standardwert ist kein Wert und das Laufwerk entscheidet sich. | wahr | falsch | FALSCH |
| Time-out | Legen Sie die maximale Zeit ein, die das Laufwerk auf eine Antwort wartet, bevor Sie eine Ausnahme auswerfen. Die Standardeinstellung ist ohne Wert festzulegen, und das Laufwerk selbst entscheidet | Positive Ganzzahl | Nicht gesetzt |
| fetchsize | Nach dem Einstellen eines Wertes wird das Laufwerk erregt, nach der Anzahl der Ergebnissätze diesen Wert zu erreichen. Die Standardeinstellung ist nicht festgelegt und das Laufwerk entscheidet sich. | Positive Ganzzahl | Entscheidung vorantreiben |
| AUSGABETTYPE ARTAGTTYPE | Erklärung, vorbereitete Erklärung, Callable -Erklärung. Vorbereitete Aussagen, Callable -Aussagen | STELLUNGNAHME VORBEREITET ABRUFBAR | VORBEREITET |
| resultsetType | vorwärts_only, scroll_sensitiv, scroll_inemsitiv Nur weiterleiten, sensible, von Fall unempfindliche Scrollen | Vorwärts_only Scroll_sensitiv Scroll_inemsitiv | Entscheidung vorantreiben |
2.2 Einfügen
Eine einfache Anweisung Insert:
<!-student-> <insert id = "InsertStudent" parameterType = "studententity"> in student_tbl (student_id, student_name, student_sex, student_birthday, class_id) Werte ( #{studentid}, #{Studentname}, #{studentSex}, #{Studentbirthday}, #{Studentbirth}, #{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{})), {{ #{{Studentbirthday}), einfügen.Insert kann die von der Datenbank unterstützte automatische Primärschlüsselrichtlinie verwenden, useGeneratedKeys = ”true“ festgelegt und dann KeyProperty auf die entsprechende Spalte festlegen, und das ist geschehen. Beispielsweise verwendet die obige Studententität automatisch generiert, um einen Primärschlüssel für die ID-Spalte zu generieren. Sie können auch das SelectKey -Element verwenden. Das folgende Beispiel verwendet die MySQL -Datenbank NextVal ('Student') als benutzerdefinierte Funktion, um einen Schlüssel zu generieren.
<!-- Insert student automatic primary key--> <insert id="insertStudentAutoKey" parameterType="StudentEntity"> <selectKey keyProperty="studentID" resultType="String" order="BEFORE"> select nextval('student') </selectKey> INSERT INTO STUDENT_TBL (STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, CLASS_ID) VALUES ( #{studentid}, #{studentName}, #{studentSex}, #{studentBirthday}, #{classEntity.classid}) </Insert>| Eigentum | beschreiben | Erhalten Sie den Wert | Standard |
| Ausweis | In diesem Modus kann ein eindeutiger Kennung durch andere Aussagen verwiesen werden | ||
| Parametertyp | Der vollständige Klassenname oder Alias für den Parameter übergeben an diese Anweisung | ||
| Flushcache | Wenn der Cache auf True gesetzt wird, wird der Cache jedes Mal gelöscht, wenn die Aussage aufgerufen wird. Die Auswahlanweisung wird standardmäßig auf False festgelegt | wahr | falsch | FALSCH |
| usecache | Wenn es auf True gesetzt ist, wird der Ergebnissatz der Anweisung zwischengespeichert. Die Auswahlanweisung ist standardmäßig auf false fest gesetzt | Falsch falsch Durch Timeout wird die maximale Zeit festgelegt, die das Laufwerk auf die Antwort wartet, bevor sie eine Ausnahme ausgelegt hat. Der Standardwert ist kein Wert und das Laufwerk entscheidet sich. | wahr | falsch | FALSCH |
| Time-out | Legen Sie die maximale Zeit ein, die das Laufwerk auf eine Antwort wartet, bevor Sie eine Ausnahme auswerfen. Die Standardeinstellung ist ohne Wert festzulegen, und das Laufwerk selbst entscheidet | Positive Ganzzahl | Nicht gesetzt |
| fetchsize | Nach dem Einstellen eines Wertes wird das Laufwerk erregt, nach der Anzahl der Ergebnissätze diesen Wert zu erreichen. Die Standardeinstellung ist nicht festgelegt und das Laufwerk entscheidet sich. | Positive Ganzzahl | Entscheidung vorantreiben |
| AUSGABETTYPE ARTAGTTYPE | Erklärung, vorbereitete Erklärung, Callable -Erklärung. Vorbereitete Aussagen, Callable -Aussagen | STELLUNGNAHME VORBEREITET ABRUFBAR | VORBEREITET |
| useGeneratedKeys | Sagen Sie MyBatis, sie sollen die GetGeneratedKeys -Methode von JDBC verwenden, um den von der Datenbank generierten Primärschlüssel zu erhalten (MySQL, SQLServer usw. Relationale Datenbanken haben Felder, die automatisch generiert werden). Standard: Falsch | wahr | falsch | FALSCH |
| Schlüsselproperschaft | Identifizieren Sie einen von dem Schlüssel zurückgegebenen Wert, der auf mybatis in GetGeneratedKeys eingestellt ist, oder verwenden Sie einen SelectKey für die Anweisung Insert Unterelement. |
| Eigentum | beschreiben | Erhalten Sie den Wert |
| Schlüsselproperschaft | Das Attribut, das für das von der SelectKey -Anweisung generierte Ergebnis festgelegt werden muss. | |
| Ergebnistyp | Ergebnistypen generieren. MyBatis ermöglicht die Verwendung grundlegender Datentypen, einschließlich String- und INT -Typen. | |
| Befehl | Es kann vor oder nach dem Einsatz gesetzt werden. Wenn es zuvor eingestellt ist, wird zuerst die Primärschlüssel ausgewählt, dann die Schlüsselproperschaft festgelegt und dann die Anweisung Insert ausführen. Wenn es nach After festgelegt ist, wird zuerst die Anweisung Einfügen ausgeführt und dann die SelectKey -Anweisung ausgeführt. Dies ist normalerweise der Sequenzmechanismus, der in die Anweisung Insert in der internen Anrufdatenbank (z. B. Oracle) eingebettet ist. | VOR NACH |
| AUSGABETTYPE ARTAGTTYPE | Wie oben unterstützt MyBatis Anweisungen, vorbereitete und aufrufbare Anweisungsformulare, die den Antworten zur Erklärung, vorbereiteten Stellungen und Callablestatements entsprechen. | STELLUNGNAHME VORBEREITET ABRUFBAR |
2.3 Update, löschen
Ein einfaches Update:
<!-- Update student information--> <update id="updateStudent" parameterType="StudentEntity"> UPDATE STUDENT_TBL SET STUDENT_TBL.STUDENT_NAME = #{studentName}, STUDENT_TBL.STUDENT_SEX = #{studentSex}, STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday}, STUDENT_TBL.CLASS_ID = #{classEntity.classid} wobei student_tbl.student_id = #{studentId}; </update>Ein einfaches Löschen:
<!-Student löschen-> <delete id = "deletestudent" parameterType = "studententity"> aus student_tbl wob
Aktualisieren und Löschen von Anweisungsattributkonfigurationsdetails:
| Eigentum | beschreiben | Erhalten Sie den Wert | Standard |
| Ausweis | In diesem Modus kann ein eindeutiger Kennung durch andere Aussagen verwiesen werden | ||
| Parametertyp | Der vollständige Klassenname oder Alias für den Parameter übergeben an diese Anweisung | ||
| Flushcache | Wenn der Cache auf True gesetzt wird, wird der Cache jedes Mal gelöscht, wenn die Aussage aufgerufen wird. Die Auswahlanweisung wird standardmäßig auf False festgelegt | wahr | falsch | FALSCH |
| usecache | Wenn es auf True gesetzt ist, wird der Ergebnissatz der Anweisung zwischengespeichert. Die Auswahlanweisung ist standardmäßig auf false fest gesetzt | Falsch falsch Durch Timeout wird die maximale Zeit festgelegt, die das Laufwerk auf die Antwort wartet, bevor sie eine Ausnahme ausgelegt hat. Der Standardwert ist kein Wert und das Laufwerk entscheidet sich. | wahr | falsch | FALSCH |
| Time-out | Legen Sie die maximale Zeit ein, die das Laufwerk auf eine Antwort wartet, bevor Sie eine Ausnahme auswerfen. Die Standardeinstellung ist ohne Wert festzulegen, und das Laufwerk selbst entscheidet | Positive Ganzzahl | Nicht gesetzt |
| fetchsize | Nach dem Einstellen eines Wertes wird das Laufwerk erregt, nach der Anzahl der Ergebnissätze diesen Wert zu erreichen. Die Standardeinstellung ist nicht festgelegt und das Laufwerk entscheidet sich. | Positive Ganzzahl | Entscheidung vorantreiben |
| AUSGABETTYPE ARTAGTTYPE | Erklärung, vorbereitete Erklärung, Callable -Erklärung. Vorbereitete Aussagen, Callable -Aussagen | STELLUNGNAHME VORBEREITET ABRUFBAR | VORBEREITET |
<!-Multiplex SQL-Anweisung an alle Felder der Studententabelle-> <sql id = "selectStudentall"> Select St.Student_id, St.Student_Name, St.Student_sex, St.Student_Birthday, St.Class_id von student_tbl st </sql>>
Auf diese Weise können Sie sie direkt in der Auswahlanweisung verweisen und verwenden. Ändern Sie die obige Auswahlanweisung in:
<!-Abfragen Sie den Schüler gemäß ID-> <select id = "getstudent" parameterType = "String" resultmap = "studentResultmap"> <include refid = "selectstudentall"/> wobei St.Student_id = #{studentid} </select> 2.5 Parameter
An vielen Stellen wurden Parameter verwendet, wie Abfrage, Änderung, Löschbedingungen, Insertion, modifizierte Daten usw. Die grundlegenden Datentypen, die MyBatis verwenden können, und die komplexen Datentypen von Java.
Grundlegende Datentypen, Zeichenfolge, int, Datum usw.
Die Verwendung grundlegender Datentypen kann jedoch nur einen Parameter bereitstellen, sodass Sie die Java -Entitätsklasse oder den Kartentyp als Parametertyp verwenden müssen. Seine Attribute können direkt über #{} erhalten werden.
2.5.1 Grundtypparameter
Suchen Sie die Schülerliste anhand der Zulassungszeit:
<!-Abfragen Sie die Schülerliste gemäß der Zulassungszeit-> <select id = "GetstudentListByDate" ParameterType = "Date" resultmap = "studentResultmap"> auswählen * Aus student_tblle links joinci-class_tbl ct auf St.Class_id = ct.class_id, wob </select>
LIST <Stud StudyEntity> studentList = studentMapper.getstudentListByClassSyear (Stringutil.Parse ("2007-9-1")); für (Studententity EntityTemp: StudentList) {System.out.println (EntityTemp.ToString ()); } 2.5.2 Java -Entitätstypparameter
Suchen Sie die Schülerliste mit Namen und Geschlecht. Verwenden Sie Entitätsklassen als Parameter:
<!-Abfragebudentliste, wie Name, = Geschlecht, Parameterentitätstyp-> <select id = "getstudentlistwhereEntity" ParameterType = "Studententity" resultMap = "studentResultMap"> SELECT * aus student_tbl st, wo St.Student_Name wie concat ('%', {Student {Student {Student}),},},}),}),}). </select> Studententity Entity = New Studententity (); Entity.SetStudentName ("li"); Entity.SetStudentSex ("männlich"); LIST <Stud StudyEntity> studentList = studentMapper.getStudentListwhereEntity (Entity); für (Studententity EntityTemp: StudentList) {System.out.println (EntityTemp.ToString ()); } 2.5.3Map -Parameter
Suchen Sie die Schülerliste mit Namen und Geschlecht. Verwenden Sie MAP als Parameter:
<!-Abfrage Schülerliste, = Geschlecht, Parameter-Kartentyp-> <select id = "GetstudentListWheremap" ParameterType = "map" resultMap = "studentResultmap"> SELECT * von student_tbl st, wo St.Student_sex = #{Sex} und St.Student_Sex = # #{sex} </select} </select} </select} </select} </select} </select} </Select} </Select} </Select} </Select} </Select} </select Karte <String, String> map = new HashMap <String, String> (); map.put ("Sex", "weiblich"); map.put ("name", "li"); LIST <Stud StudyEntity> studentList = studentMapper.getstudentListWheremap (MAP); für (Studententity EntityTemp: StudentList) {System.out.println (EntityTemp.ToString ()); } 2.5.4 Implementierung von Multi-Parametern
Wenn Sie mehrere Parameter übergeben möchten, müssen Sie den Parametern der Schnittstelle @Param -Annotation hinzufügen. Bei einem Beispiel:
Schnittstellenschreiben:
Public List <Stud StudyEntity> GetStudentListwhereParam (@param (value = "name") String -Name, @param (value = "sex") String Sex, @param (value = "birthday") Datum Geburtstag, @param (value = "classEntity") Classentity Classentity);
SQL -Schreibmethode:
<!-Abfragebudentliste, wie Name, = Geschlecht, = Geburtstag, = Klasse, Multi-Parameter-Methode-> <select id = "getstudentlistwhereParam" resultMap = "StudentResultMap"> SELECT * von student_tbl st <where> <if test = "name! = Null und name! </if> <if test = "sex! = null und sex! = #{classEntity.classid} </if> </where> </select>Eine Frage machen:
LIST <Stud StudyEntity> studentList = studentMapper.getstudentListwhereParam ("," ", Stringutil.Parse (" 1985-05-28 "), ClassMapper.getClassById (" 20000002 "); for (Studententity EntityTemp: StudentList) {). 2.5.5 String -Substitutionsmethode
Verwenden Sie #{} Syntax standardmäßig bewirken MyBatis die Eigenschaft vorbereiteter Versuchen Sie, schnell und sicher zu sein, und werden auch häufig verwendet. Aber manchmal möchten Sie möglicherweise unveränderte Zeichenfolgen direkt in SQL -Aussagen ersetzen. Zum Beispiel können Sie dies für Bestellung verwenden, können Sie Folgendes verwenden: Bestellung von $ {columnName}, aber MyBatis wird diese Zeichenfolge nicht ändern und umgehen.
Hinweis: Es ist sehr unsicher, auf diese Weise eine Benutzereingabe in eine unveränderte Anweisung zu empfangen und anzuwenden. Auf diese Weise kann der Benutzer beschädigte Code implantieren. Erfordern Sie jedoch, dass das Feld nicht dem Client eingeben kann, oder Sie überprüfen die Legitimität direkt.
2.6 Cache -Cache
MyBatis enthält einen leistungsstarken, konfigurierbaren, anpassbaren Cache -Mechanismus. Die Cache -Implementierung von MyBatis 3 wurde um ein Vielfaches verbessert, was sowohl leistungsfähig als auch einfacher zu konfigurieren ist. Standardmäßig ist der Cache nicht aktiviert. Zusätzlich zum Sitzungs -Cache kann es die Leistung verbessern und globale Abhängigkeiten lösen. Schalten Sie Level 2 Cache ein, Sie müssen der SQL -Zuordnungsdatei nur eine einfache Zeile hinzufügen: <Cache/>
Die Funktion dieses einfachen Satzes lautet wie folgt:
(1). Alle Auswahlanweisungen in der Zuordnungsdatei werden zwischengespeichert.
(2). Alle Einfügen, Aktualisieren und Löschen von Anweisungen in der Zuordnungsdatei löschen den Cache.
(3). Der Cache wird unter Verwendung des Algorithmus "Selten verwendet kürzlich verwendet" (4) recycelt. Der Cache wird von der festgelegten Zeit nicht gelöscht.
(5). Jeder Cache kann 1024 Listen oder Verweise auf Objekte speichern (unabhängig vom Abfrageergebnis).
(6). Der Cache wird als "Lese-/Schreiben" -Cache verwendet, was bedeutet, dass das abgerufene Objekt nicht gemeinsam genutzt wird und für den Anrufer sicher ist. Es wird keine anderen Anrufe geben (7). oder mögliche Änderungen am Thread.
Erstellen Sie beispielsweise einen FIFO-Cache, um einmal in 60 Sekunden zu löschen, 512 Objektergebnisse oder Listenreferenzen zu speichern und die Ergebnisse schreibgeschützt zurückzugeben. Da das Ändern in nicht verwendeten Threads zu Referenzkonflikten führen kann.
<cache eviction = "fifo" fluschInterval = "60000" size = "512" readonly = "true"> </cache>
Sie können auch dieselbe Cache -Konfiguration oder -instanz in verschiedenen Namensspitzen teilen. In diesem Fall können Sie Cache-Ref verwenden, um einen anderen Cache zu verweisen.
<cache-ref namespace = "com.liming.manager.data.studentMapper"/>
Cache -Anweisung Attribut -Konfigurationsdetails:
| Eigentum | veranschaulichen | Erhalten Sie den Wert | Standardwert |
| Vertreibung | Caching -Richtlinie: LRU - Neueste Verwendung: Entfernen von Objekten, die in der letzten langen Zeit nicht verwendet wurden. FIFI-ERSTE-INST-OUT: Verschieben Sie das frühere Objekt in der Warteschlange Soft - Soft Reference: Basierend auf weichen Referenzregeln entfernen Sie den Müllsammlungsmechanismus, um Objekte zu entfernen Schwache - Schwache Referenz: Verwenden Sie den Müllansammlungsmechanismus, um Objekte basierend auf schwachen Referenzregeln zu entfernen | LRU Fifi WEICH SCHWACH | LRU |
| FlushInterval | Repräsentiert eine angemessene Millisekundengesamtzeit. Die Standardeinstellung ist nicht festgelegt. Wenn Sie also eine Unterminval -Lichtung verwenden, können Sie nur Anweisungen aufrufen, um es zu löschen. | Positive Ganzzahl | Nicht gesetzt |
| Größe | Die Größe des zwischengespeicherten Objekts | Positive Ganzzahl | 1024 |
| Readonly | Der schreibgeschützte Cache gibt alle Anrufer dieselbe Instanz zurück. Daher kann keiner von ihnen geändert werden, was die Leistung erheblich verbessern kann. Beschreibbarer Cache wird die Sequenz durchlaufen eine Kopie eines zwischengespeicherten Objekts zurückgeben. Das wird langsamer, aber sicherer. Der Standardwert ist also falsch. | wahr | falsch | FALSCH |