Einführung in MyBatis
MyBatis wurde von Ibatis, einem Java-basierten Datenpersistenzschicht/Objekt Relational Mapping (ORM) -Regel, vorgelegt.
MyBatis ist eine Verkapselung von JDBC, die es Entwicklern ermöglicht, sich nur auf SQL selbst zu konzentrieren, ohne zu viel Anstrengungen zu verarbeiten, um JDBC -Verfahrenscode zu verarbeiten, Treiber zu registrieren, Parameter zu erstellen, die Verbindungen/Anweisungen erzeugen, das Analyse von Ergebnissen usw. usw. MyBatis -Konfigurationsanweisung basierend auf XML/Annotation, führendem SQL -Entwicklungsabbau.
MyBatis ist ein erstklassiges Persistenz -Framework mit Unterstützung für benutzerdefinierte SQL, gespeicherte Verfahren und fortgeschrittene Zuordnungen. MyBatis eliminiert fast den gesamten JDBC -Code und die manuelle Einstellung der Parameter und das Abrufen der Ergebnisse. MyBatis kann einfache XML oder Anmerkungen zur Konfigurations- und Kartenprimitive, Kartenschnittstellen und Java -Pojos (einfache alte Java -Objekte) zu Datenbankdatensätzen verwenden.
MyBatis -Projektadresse/Online -Dokumentation.
Treffen Sie zuerst MyBatis
Erfordert die Verwendung von MyBatis das Hinzufügen der folgenden Abhängigkeiten in pom.xml:
<Code> <depeencing> <GroupId> org.mybatis </Groupid> <artifactId> mybatis </artifactId> <version> 3.3.0 </Version> </abhängig> <dep endcy> <GroupID> Mysql </Groupid> <artifactId> Mysql-connector-Java </artifactId> <version> 5.1.36 </Version> </abhängig> </code>
Wählen
Konfigurieren Sie MyBatis/MyBatis-Configuration.xml
Als globale Konfigurationsdatei von MyBatis wird sie mit den laufenden Umgebungsinformationen von MyBatis (z. B. Datenquelle/Mapper -Datei usw.) konfiguriert.
<code> <code> <!-{CKE_Protected} {C}%3C!%2D%2D%3FXML%20version%3D%221,0%22%20Coding%3D%22UTF-8%22%20%3F%2D%3E-> <umwelt> <ummomodary default = "Development" id = "Entwicklung"> <!-{CKE_Protected} {c}%3c!%2d%%20%E9%85%8D%E7%BD%aejdbc%E4%ba%8b%E5%8a%a1%E7%E7%90%%%2d 2d 2d 2d 2d 2d 3d 3 E7%%ig type = "jdbc"> <!-{{CKE_Protected} {C}%3C!%2D%2D%20%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E6%BA%2D%%2D%%3E "<dataSource Typ". value = "com.mysql.jdbc.driver"> <Eigenschaft name = "url" value = "jdbc: mysql: // host: port/db? charakterscoding = utf-8"> <Eigenschaft Name = "Benutzername"> <Eigenschaft name = "Passwort" value = "password"> </property> </property> </property> </dataSource> </transactionManager> </umwelt> </umgebungen> <!-{c ke_protected} {c}%3c!%2d%2d%20%e5%8a%a0%e8%bd%bdmapper%e6%98%a0%e5%b0%84%E6%96%87%E4%BB%20%2D%%2D%3D 3E> <mappers> <mappers ressourcen = "mybatis/mapper/userdao.xml"> </mapper> </mappers> </configuration> </code>Schreiben von UserDao (Mapper -Karte)
Der zentralste Teil von MyBatis ist mit SQL -Anweisungen konfiguriert, die die Datenbank betreiben:
<code> <code> <code> <!-{CKE_Protected} {C}%3C!%2D%2D%3FXML%20version%3D%221,0%22%20Coding%3D%22UTF-8%22%20%3F%2D%3E-<mapper namenspace = "namespace"> id%3e-> <mapper namenspace = "namespace" parameterType = "java.lang.InEger" resultType = "com.fq.domain.user '%$ {value}%'; </select> </minkPer> </code> </code> Attributbeschreibung
Namespace Namespace, verwendet, um SQL -Anweisungen zu isolieren
ParameterType definiert den SQL -Eingangszuordnungsart, und MyBatis erhalten Parameter aus dem Eingabefiel über OGNL, um in SQL -Anweisungen zu übergeben.
Das Ergebnistyp definiert den SQL -Ausgangszuordnungsart. MyBatis ordnet eine Reihe von Datensätzen von SQL -Abfrageergebnissen auf den vom Ergebnistyp angegebenen Typ ab.
Der Mapper -Mapping -Dateiname enthält userDao.xml/usermapper.xml/user.xml und andere Formulare. Sie werden im Allgemeinen im Mapper-Verzeichnis des gleichen Niveaus wie MyBatis-Configuration.xml gespeichert. Da seine Hauptfunktion darin besteht, die Beziehung zwischen SQL -Anweisungen und Zuordnungen zu definieren, wird sie im Allgemeinen gemeinsam als Mapper -Mapping -Dateien bezeichnet.
Definieren Sie die PO -Klasse
Die Hauptfunktion der PO -Klasse ist die SQL (Input/Output) -Anordnung, die normalerweise Datenbanktabellen entspricht:
<code> <code> <code> <code> <code>/*** @Author Jifang*@Since 15/12/31 2:27 PM. {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Benutzer {" + "id =" + id + ", name = '" + name +'/'' + ", Passwort = '" + Passwort +'/' +'} ';}} </code> </code> </code> </code>UserDao (Java -Objekt)
Holen Sie sich SQLSession, führen Sie SQL -Anweisungen aus und erhalten Sie das Zuordnungsergebnis:
<code> <code> <code> <code> <code> <code> <code>/*** @Author Jifang*@Since 16/2/24 6:15 PM. SQLSessionFactoryBuilder (). Build (Ressourcen.getResourceAsStream (Ressourcen));}@Testpublic void selectUserById () {try (sqlSession sesion = factory. SelectUserByName () {try (SQLSession Session = Factory.OpenSession ()) {List <Unter> user> user = session.SelectList ("Namespace.SelectUserByName", "Student"); für (Benutzer Benutzer: Benutzer) {System.out.println (Benutzer);}}}} </user> </code> </code> </code> </code> </code>Einfügen
Mapper
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <id = "insertUser" parameterType = "com.fq.domain.user"> in user (Name, Passwort) Werte ( #{Name}, #{Passwort});Userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @Testpublic voiduser () {try (SQLSession Session = factory.openSession ()) {user user = new User (); user.setName ("new_name1"); user.setPassword ("new_password"); session.insert ("Namespace.insertUser", user); session.commit ();}} </code> </code> </code> </code> </code> Rückkehr durch Auto-Increment-Primärschlüssel
Ändern Sie die Mapper-Datei und fügen Sie sie hinzu.
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code id = "insertSer" parameterType = "com.fq.domain.user Last_insert_id (); </selectKey> in user (name, password) values ( #{name}, #{password}); </einfügen> </code> </code> </code> </code> </code>Userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @TestPublic void InsertUser () {try (sqlSession Session = factory.openSession ()) {system.out.println (session); teufer = negree = newnamen (neul), New_Name ", New_Name", ",", "New_Name", ",", "," New_Name ",", "," New_Name ",", ",", "New_Name", ",", "," New_Name ",", ",", "New_Name", ",", "," New_Name ",", ",", "New_Name",, "new_password"); sessionDiese Funktion kann auch über die UseGeneratedKeys/KeyProperty -Eigenschaften ausgeführt werden. Weitere Informationen finden Sie in der MyBatis -Dokumentation.
Aktualisieren
Mapper
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <update id = "updateUserById" parameterType = "com.fq.domain.user"> aktualisieren Benutzer set name = {name}, kennwort #{id}; </update> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>Userdao
<Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @Testpublic void UPDUSERBYID () {try (SQLSession Session = Factory.opensession (true)) {Session. "feiqing", "icy5yqxzb1uwswcvlsnlca =="));}} </code> </code> </code> </code> </code> </code> </code> </code> </code>Löschen
Mapper
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><delete id="deleteUserById" parametertype="java.lang.Integer">DELETE FROM user WHERE id = #{id}; </delete> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>Userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @Testpublic void deleteerbyid () {try (sqlSession Session oderZusammenfassung
#{}/$ {}
#{}: Repräsentiert einen Platzhalter, implementiert einen Wert, der dem Platzhalter vorbereitet eingerichtet wird ( #{} stellt einen Platzhalter dar?) Und konvertiert automatisch den Java -Typ in JDBC -Typ ( #{} kann die SQL -Injektion effektiv verhindern). #{} kann einfache Typ- oder PO -Attributwerte empfangen. Wenn ParameterType einen einzelnen einfachen Typwert überträgt, kann der Wert #{} Wert oder andere Namen in den #{} Curly -Klammern sein. $ {} kann verwendet werden, um SQL -Zeichenfolgen zu spleißen. Der Parametertyp -Inhalt kann ohne JDBC -Typumwandlung in SQL gespleißt werden. $ {} kann verwendet werden, um einfache Typ- oder PO -Attributwerte zu empfangen. Wenn ParameterType einen einzelnen einfachen Typwert überträgt, kann der $ {} nur zum Wert in den $ {} lockigen Klammern verwendet werden.
Obwohl $ {} die SQL -Injektion nicht verhindern kann, ist $ {} manchmal sehr bequem (z. B. Reihenfolge durch Sortieren, Spaltennamen müssen über Parameter in SQL übergeben werden, dann wird die Reihenfolge nach $ {Spalte} verwendet, und #{} kann nicht verwendet werden, um diese Funktion zu implementieren (siehe jdbc grundlegende Diskussionsdiskussionsdiskussionen für Details).
SqlSession
Geben Sie Methoden zum Betrieb der Datenbank an (z. B.: SelectOne/Selectlist). SQLSession ist jedoch eine Thread-Discover.
Vorteile von mybatis (im Vergleich zu JDBC)
SQL ist in Java -Code geschrieben, was es schwierig macht, sie zu pflegen. MyBatis schreibt SQL in Mapper, und XML ist vom Java -Code getrennt. Es ist kompliziert, Parameter an SQL -Anweisungen zu übergeben (z. B.: SQL, wobei die Bedingungen unterschiedlich sind, SQL -Datentypen unterscheiden sich von Java). MyBatis ordnet Java -Objekte automatisch durch ParameterType an SQL -Anweisungen zu. Die Analyse des Ergebnissatzes ist problematisch (SQL -Änderungen führen zu Parsen -Code -Änderungen, SQL -Datentypen unterscheiden sich von Java). MyBatis ordnet die SQL -Ausführungsergebnisse automatisch in Java -Objekte über das Ergebnistyp ab.
Anhang: Es ist am besten, POM.xml eine Implementierung des Protokollsystems (Logback/Log4J) hinzuzufügen, sodass Protokollinformationen beim Debuggen des Programms gedruckt werden, wodurch die Überprüfung der Fehler einfacher wird. Logback als Beispiel:
pom.xml
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Code> <Code> <code> <code> <code> <Code> <Code> ch.qos.logb ACK </GroupID> Logback-Classic </artifactId> <version> 1.1.2 </Version> </abhängig> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
logback.xml
<Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <configuration> <Cousform> <Cousname = "lOGroot"/data/data/logs "> <cous"> < value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n"><appender name="STDOUT"><encoder><pattern>${pattern}</pattern></encoder></appender><appender name = "file"> <rollingPolicy> <filenamepatts> $ {logroot} /common-server.%D {yyyy-mm-dd} .Log </fileNamePerstApper> <maxhistory> 7 </maxhistory> </rollingPolicy> appendender> appoder> app Level = "Debug"> <Appender-ref ref = "stdout"> <Appender-ref ref = "file"> </appender-ref> </appender-ref> </root> </property> </property> </configuration> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>Weitere Details zu MyBatis -Protokollen finden Sie im Abschnitt MyBatis -Dokumentprotokoll.
DAO -Entwicklung
Es gibt zwei Möglichkeiten, DAO mithilfe von MyBatis, Original DAO -Entwicklung und Mapper Mapping DAO -Entwicklung zu entwickeln.
Die ursprüngliche DAO -Entwicklung Original DAO -Entwicklung erfordert Entwicklern, DAO -Schnittstellen und DAO -Implementierungen zu schreiben, z.
Mapper (gleich wie zuvor)
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <code> <code> <Code> <Code id = "selektuserbyId" parametype resultType = "com.fq.domain.user"> ausgewählt * vom Benutzer wobei id = #{id}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code Benutzerdao -Schnittstelle
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code>/*** @author JIFFANG* @ @@Since 16/2/2/22 10:20 Am. SelectUserById (Integer ID) löst eine Ausnahme aus;} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
UserDao -Implementierung
<Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <code> <code> <code> <code> <code> <Codes> <Code> <Code> <Codes> <code> <code> <Codes> <Code> <code> <Code> usw. usw. usw. usw. use> <code> <Code> usw. usw. -usw. usw. usw> <code> <Code> <Code> usw. usw -usw. usw. usw. factory; public userDaOImpl (SQLSessionFactory Factory) {this.factory = factory;}@oversidepublic user selectUserById (Integer id) löst eine Ausnahme aus {SQLSession Session = factory.OpenSession (); user user = Selectone ("NamensPace.SelectUlerbyIdId); Benutzer;}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> Kunde
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code>public class MyBatisClient {@Testpublic void originalClient () löst Ausnahme aus {userDao dao = new UserDaOImpl (new SQLSessionFactoryBuilder (). Build (classloader.getSystemResourceAsStream ("myBatis/mybatis-configuration.xml")); Nutzer dao.selectUserById(1);System.out.println(user);}}</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>Probleme in der ursprünglichen DAO -Entwicklung:
1) Es gibt viele Verfahrenscodes in der DAO -Implementierungsmethode.
2) Aufrufen der SQLSession-Methode (auswählen/einfügen/aktualisieren) muss die ID der Anweisung angeben, die hart codiert ist und der Code-Wartung nicht förderlich ist.
Mapper Mapping -Entwicklung
Die Mapper Mapping -Entwicklungsmethode erfordert nur das Schreiben einer DAO -Schnittstelle, und MyBatis erstellt dynamisch eine Schnittstellenimplementierung basierend auf der Schnittstellendefinition und SQL -Anweisungen in der Mapper -Datei.
Mapper
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <codes> <! Namespace = "com.fq.mybatis.userdao"> <select id = "selectUserById" ParameterType = "java.lang.Ineger" resultType = "com.fq.domain.user #{id}; </select> </minkPer> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>Hinweis: Der Namespace muss zu diesem Zeitpunkt mit dem voll qualifizierten Namen der Benutzerdao -Schnittstelle übereinstimmen.
Die Benutzerdao -Schnittstelle ist die gleiche wie zuvor, aber der userDaoImpl -Client wird nicht mehr verwendet.
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code>/*** @author jifang* @since 16/2/22 2:57 pm.*/public class myBatisclient {private sqlSession Session; private sqlSessionFactory Factory; @Beforepublic void setup () {factory = new SQLSessionFactoryBuilder () build (classloader.getSystem.xmresSourceStream ("mybatis/mybatis-configuration.xml). factory.openSession ();}@testpublic void mappperClient () löst Ausnahme aus {userDao dao = session.getMapper (userDao.class); user user = dao.SelectUserById (1); oderDie Methoden zur Zuordnung von Mapper Mapping müssen den folgenden Spezifikationen folgen:
Der Namespace in der Mapper -Datei entspricht dem voll qualifizierten Namen der DAO -Schnittstelle. Die ID der Anweisung in der Mapper -Datei entspricht dem Methodennamen der DAO -Schnittstelle. Der ParameterType/Ergebnistyp der Anweisung in der Mapper -Datei entspricht dem Parameter/Ergebnistyp der DAO -Methode.
Mapper Mapping
Die Hauptfunktion von Mapper -Mapping -Dateien (z. B. userDao.xml) besteht darin, SQL -Anweisungen zu definieren (jede SQL ist eine Anweisung), die der Kern von MyBatis ist.
MyBatis empfiehlt offiziell, die Mapper -Mapping -Methode zur Entwicklung von DAO zu verwenden. Daher werden wir in Zukunft nicht zu viel über die Entwicklung des ursprünglichen DAO vorstellen.
Eingabezuordnung
Mehrere formale Parameter
Das vorherige Beispiel für das Übergeben einfacher Typen wurde verwendet, daher werde ich es hier nicht wiederholen. Wenn mehrere formale Parameter übergeben werden müssen, ist der Parameter -Parameter nicht mehr erforderlich:
Mapper
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><update id="updateUserById">UPDATE user SET name = #{1}, password = {2} wobei ID = #{0}; </update> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </codeUserdao
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code>void updateUserById(Integer id, String name, String password) throws Exception;</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
Eingehende Po
MyBatis verwendet den OGNL -Ausdruck, um Objektattributwerte zu analysieren:
Mapper
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Select id = "selectUserbynamepassword" parameterType = "com.fq.domain.user" resultType = "com.fq.domain.user"> select *aus Benutzerwhere Name = #{Name} und Passwort = #{Passwort}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>Userdao
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code>User SelectUserBynamePassword (Benutzerbenutzer) löscht Ausnahme; </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
Mapper
<Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <co. DE> <Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Select id = "selectUserByMap" parameterType = "java.util.map" resultType = "com.fq.domain.user"> SELECT *von Benutzerwhere Name = #{name} und password = #{Passwort}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>#{} Die entsprechende Taste der Karte in den lockigen Klammern.
Userdao
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code>User SelectUserByMap (MAP <String, Object = ""> Map) Ausläufe Ausnahme; </string,> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
Ausgabezuordnung
Einfacher Typ ausgeben
Mapper
<Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <co. DE> <Code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Select id = "selectUerCount" parameterType = "java.lang.String" resultType = "java.lang.InEger"> Wählen Sie Count (*) aus dem Benutzernamen wie '%$ {value}%'; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code > </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>Userdao
<code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code><code>Integer selectUserCount(String name) throws Ausnahme; </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
Die Rückgabe eines einfachen Typs muss sicherstellen, dass das Abfrageergebnis nur eine Zeile von Datensätzen enthält und der Wert des ersten Feldes schließlich in den Ausgangstyp konvertiert wird.
PO -Objekt/Liste ausgeben
Es wurden zuvor zwei Arten von Ausgabe gezeigt (SelectUserById/SelectUserByName verwendete die ursprüngliche DAO -Entwicklungsmethode zu diesem Zeitpunkt, aber das Mapper -Definitionsformular war ähnlich), sodass ich hier nur eine einfache Zusammenfassung erstellen werde:
Der im Mapper definierte Ergebnistyp, der beim Ausgabe eines einzelnen PO -Objekts mit dem im Mapper definierten Ergebnistyp ausgibt. Das SQL -Abfrageergebnis muss garantiert ein einzelnes Datenstück sein und wird intern unter Verwendung der SelectOne -Methode bezeichnet. Die Ausgabe -PO -Liste gibt an, dass das Abfrageergebnis möglicherweise mehrfach ist und intern mit der Selektionslist -Methode bezeichnet wird und der Schnittstellenrückgabewert nach List/Set gehostet werden kann.
Ausgabekarte
Das Ausgabe -PO -Objekt kann stattdessen verwendet werden, um die Kartenausgabe zu verwenden, wobei der Feldname als Schlüssel und den Feldwert als Wert verwendet wird.
Mapper
<Code> <select id = "selectUserlikename" resultType = "java.util.map"> ausgewählt *aus dem Namen des Benutzers wie '%$ {value}%'; </select> </code>Userdao
<Code> <code> list <map <string, object = "" >> selectUserlikename (String -Name) löst Ausnahme aus; </map <String,> </code> </code>
resultmap
resultType kann das Abfrageergebnis auf PO zuordnen, aber die Prämisse ist, dass der PO -Eigenschaftsname und der SQL -Feldname gleich sein müssen. Wenn es inkonsistent ist, kann die entsprechende Zuordnung durch resultMap erfolgen:
Mapper
<Code> <code> <code> <resultMap id = "usermap" type = "com.fq.domain.user"> <id column = "user_id" properation = "id"> <result columne parameterType = "java.lang.String" resultMap = "usermap"> selectId user_id, name user_name, kennwort user_passwordfrom userwhere name = {name}; </select> </code> </code> </code>Die Benutzeroberfläche ist dieselbe wie zuvor.