2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《MyBatis-Theorie 40 Fragen》Enthält die folgenden 2 Artikel:
Neues Tag hinzufügen:keyProperty=“ID”
Das ist es.
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) Durch Abfragen SQL Definieren Sie den Alias des Feldnamens in der Anweisung, um den Alias des Feldnamens mit dem Attributnamen der Entitätsklasse konsistent zu machen.
<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
select order_id id, order_no orderno, order_price price form orders
where order_id=#{id};
</select>
(2) Bestanden <resultMap>
Um die Eins-zu-eins-Entsprechung zwischen Feldnamen und Entitätsklassenattributnamen abzubilden.
<select id="getOrder" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="order_id">
<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
<result property="orderno" column="order_no" />
<result property="price" column="order_price" />
</reslutMap>
(1) Vererbung der Schnittstellenimplementierungsklasse SqlSessionDaoSupport
: Um diese Methode verwenden zu können, müssen Sie schreiben mapper
Schnittstelle,mapper
Schnittstellenimplementierungsklasse,mapper.xml
dokumentieren.
sqlMapConfig.xml
Mittlere Konfigurationmapper.xml
s Position.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
Schnittstelle.SqlSessionDaoSupport
。mapper
Kann in Methoden verwendet werdenthis.getSqlSession()
Führen Sie das Hinzufügen, Löschen, Ändern und Überprüfen von Daten durch.spring
Aufbau.<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) Verwendung org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
Mittlere Konfigurationmapper.xml
Position wennmapper.xml
Undmapper
Die Schnittstellen haben den gleichen Namen und liegen im gleichen Verzeichnis, sodass hier keine Konfiguration erforderlich ist.mapper
Schnittstelle.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
Mittenamespace
fürmapper
Die Adresse der Schnittstelle.mapper
Der Methodenname in der Schnittstelle undmapper.xml
definiert instatement
vonid
konsequent sein.Spring
definiert in.<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) Verwendung mapper
Scanner.
mapper.xml
Schreiben von Dokumenten.mapper.xml
Mittenamespace
fürmapper
Die Adresse der Schnittstelle;mapper
Der Methodenname in der Schnittstelle undmapper.xml
definiert instatement
vonid
konsequent sein;mapper.xml
Undmapper
Wenn der Name der Schnittstelle konsistent bleibt, ist dies nicht erforderlichsqlMapConfig.xml
Konfigurieren Sie in .mapper
Schnittstelle.Beachtenmapper.xml
Dateiname undmapper
Die Schnittstellennamen müssen konsistent sein und im selben Verzeichnis abgelegt werden.mapper
Scanner.<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
Aus Container holenmapper
Implementierungsobjekt.Bei der Schnittstellenbindung wird eine Schnittstelle willkürlich in MyBatis definiert und dann die Methoden in der Schnittstelle mit SQL kombiniert StellungnahmeDurch die Bindung können wir die Schnittstellenmethode direkt aufrufen, also im Vergleich zum Original SqlSession
Die bereitgestellten Methoden ermöglichen uns flexiblere Auswahlmöglichkeiten und Einstellungen.
Es gibt zwei Möglichkeiten, die Schnittstellenbindung zu implementieren:
@Select
、@Update
Warten Sie, bis Anmerkungen gebunden sind, die SQL-Anweisungen enthalten.xml
Schreiben Sie SQL zum Binden hinein. In diesem Fall müssen Sie angebenxml
in der Mapping-Dateinamespace
Muss der vollständige Pfadname der Schnittstelle sein.Wenn die SQL-Anweisung relativ einfach ist, verwenden Sie die Annotationsbindung. Wenn die SQL-Anweisung relativ komplex ist, verwenden Siexml
Bindung, allgemeine Verwendungxml
Es gibt noch mehr Bindungen.mapper.xml
von jedem SQL, das in definiert istid
Dasselbe.mapper.xml
von jedem SQL, das in definiert istparameterType
vom gleichen Typ.mapper.xml
von jedem SQL, das in definiert istresultType
vom gleichen Typ.Mapper.xml
in der Dateinamespace
Das ist der Klassenpfad der Mapper-Schnittstelle.proxy
Objekt, Proxy-Objektproxy
Stattdessen werden Schnittstellenmethoden abgefangen und ausgeführtMappedStatement
stellt die SQL dar und gibt dann die SQL-Ausführungsergebnisse zurück.namespace
,Also id
Kann wiederholt werden, wenn nicht konfiguriertnamespace
,Also id
kann schließlich nicht wiederholt werden;namespace
Nicht erforderlich, nur Best Practice.namespace + id
ist als M ap < String , M apped S Anweisung > Map<String, MappedStatement>MAP<StRInG,MApptDStATtMtNT> Der zu verwendende Schlüssel, falls keiner vorhanden istnamespace
, nur der Rest id
,Also,id
Eine Duplizierung kann dazu führen, dass sich Daten gegenseitig überschreiben.Habe esnamespace
,Natur id
Du kannst es wiederholen,namespace
anders,namespace + id
Natürlich ist es anders.MyBatis kapselt alle XML-Konfigurationsinformationen in schwergewichtige All-In-One-Objekte Configuration
intern. In der XML-Zuordnungsdatei<parameterMap>
Das Tag wird analysiert alsParameterMap
Als Objekt wird jedes seiner untergeordneten Elemente analysiertParameterMapping
Objekt.<resultMap>
Das Tag wird analysiert alsResultMap
Als Objekt wird jedes seiner untergeordneten Elemente analysiertResultMapping
Objekt.Jeden<select>
、<insert>
、<update>
、<delete>
Tags werden analysiert alsMappedStatement
Objekt, das SQL im Tag wird als analysiertBoundSql
Objekt.
<resultMap>
Tags definieren nacheinander die Zuordnungsbeziehung zwischen Spaltennamen und Objektattributnamen.T_NAME AS NAME
Der Name des Objektattributs lautet im Allgemeinen name
, Kleinbuchstaben, aber MyBatis ignoriert die Groß-/Kleinschreibung von Spaltennamen und findet die entsprechenden Objektattributnamen. Sie können sogar schreiben T_NAME AS NaMe
, MyBatis kann weiterhin normal funktionieren.Nachdem die Zuordnungsbeziehung zwischen Spaltennamen und Attributnamen hergestellt wurde, erstellt MyBatis Objekte durch Reflektion und weist den Eigenschaften des Objekts mithilfe der Reflektion nacheinander Werte zu und gibt sie zurück Für diejenigen Eigenschaften, die die Zuordnungsbeziehung nicht finden können , die Aufgabe kann nicht abgeschlossen werden.
Es gibt viele andere Tags, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
, plus dynamisches SQL
9
9
9 Stichworte:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
Warten.In<sql>
Für SQL-Fragment-Tags übergeben Sie<include>
Tags führen SQL-Fragmente ein,<selectKey>
Generieren Sie Richtlinienbezeichnungen für Primärschlüssel, die die automatische Inkrementierung nicht unterstützen.
Obwohl MyBatis die XML-Zuordnungsdatei der Reihe nach analysiert, kann das referenzierte B-Tag immer noch an einer beliebigen Stelle definiert werden und MyBatis kann es korrekt identifizieren.
Das Prinzip besteht darin, dass MyBatis das A-Tag analysiert und feststellt, dass das A-Tag auf das B-Tag verweist, das B-Tag jedoch noch nicht analysiert wurde und noch nicht existiert. Zu diesem Zeitpunkt markiert MyBatis das A-Tag als ungelöst und fährt dann fort Um die verbleibenden Tags, einschließlich B-Tags, zu analysieren, analysiert MyBatis die als ungelöst markierten Tags erneut. Beim Parsen des A-Tags ist das B-Tag bereits vorhanden und das A-Tag kann normal analysiert werden.
Kann, nicht nur kann Eins-zu-viele, eins-zu-eins,Gut genug Viele-zu-viele, viele-zu-eins . Dies wird wie folgt erreicht:
MyBatis kann Aufzählungsklassen zuordnen. MyBatis kann nicht nur Aufzählungsklassen zuordnen, sondern auch jedes Objekt einer Spalte der Tabelle zuordnen.Die Zuordnungsmethode ist kundenspezifischTypeHandler
,erreichen TypeHandler
vonsetParameter()
UndgetResult()
Schnittstellenmethoden.
TypeHandler
Es hat zwei Funktionen, eine besteht darin, das zu vervollständigenjavaType
ZujdbcType
Der Umbau, der zweite ist abgeschlossenjdbcType
ZujavaType
Die Konvertierung wird widergespiegelt alssetParameter()
UndgetResult()
Die beiden Methoden repräsentieren das Festlegen der SQL-Fragezeichen-Platzhalterparameter bzw. das Abrufen der Spaltenabfrageergebnisse.
Mit dem dynamischen SQL von MyBatis können wir dynamisches SQL in Form von Tags in die XML-Zuordnungsdatei schreiben, um die Funktionen der logischen Beurteilung und des dynamischen Spleißens von SQL zu vervollständigen
9
9
9 Dynamische SQL-Tags:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
Sein Ausführungsprinzip ist die Verwendung OGNL
Berechnen Sie den Wert des Ausdrucks aus dem SQL-Parameterobjekt und verbinden Sie SQL dynamisch entsprechend dem Wert des Ausdrucks, um die Funktion von dynamischem SQL zu vervollständigen.
MyBatis verwendet RowBounds
Das Objekt ist paginiert, es ist fürResultSet
Das vom Ergebnissatz durchgeführte Speicher-Paging ist kein physisches Paging. Sie können Parameter direkt mit physischem Paging in SQL schreiben, um die physische Paging-Funktion abzuschließen, oder Sie können ein Paging-Plug-In verwenden, um das physische Paging abzuschließen.
Das Grundprinzip des Paging-Plug-Ins besteht darin, die von MyBatis bereitgestellte Plug-In-Schnittstelle zu verwenden, um ein benutzerdefiniertes Plug-In zu implementieren, die auszuführende SQL in der Abfangmethode des Plug-Ins abzufangen und die SQL dann entsprechend neu zu schreiben Zu dialect
Dialekt, fügen Sie entsprechende physische Paging-Anweisungen und physische Paging-Parameter hinzu.
Beispiel:
select * from student
Nachdem Sie die SQL abgefangen haben, schreiben Sie sie wie folgt um:
select t.* from (select * from student) t limit 0, 10
MyBatis kann nur für schreiben ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
Das
4
4
4 MyBatis ist eine Art Schnittstellen-Plugin und verwendet den dynamischen Proxy von JDK, um Proxy-Objekte für die Schnittstellen zu generieren, die abgefangen werden müssen, um die Funktion zum Abfangen der Schnittstellenmethode zu implementieren.
4
4
4 Methode eines Schnittstellenobjekts, es wird insbesondere die Abfangmethode eingegebenInvocationHandler
voninvoke()
Methoden fangen natürlich nur die Methoden ab, die Sie zum Abfangen angeben.
Implementieren Sie MyBatis Interceptor
Schnittstelle und Overrideintercept()
Methode, schreiben Sie dann Anmerkungen für das Plug-In und geben Sie an, welche Methoden welcher Schnittstelle Sie abfangen möchten. Vergessen Sie nicht, das Plug-In zu konfigurieren, das Sie in der Konfigurationsdatei geschrieben haben.
PerpetualCache
Lokaler HashMap-Cache, sein Speicherbereich ist Sitzung, wenn Sitzungflush
oderclose
Danach werden alle Caches in der Sitzung gelöscht und der Cache der ersten Ebene wird standardmäßig aktiviert.PerpetualCache
, HashMap-Speicher, der Unterschied besteht darin, dass sein Speicherbereich beträgt Mapper
(Namespace
), und die Speicherquelle kann angepasst werden, z Ehcache
.Der Second-Level-Cache ist standardmäßig nicht aktiviert. Um den Second-Level-Cache zu aktivieren, muss die Second-Level-Cache-Attributklasse implementiert werden.Serializable
Serialisierungsschnittstelle (kann zum Speichern des Status eines Objekts verwendet werden), konfigurierbar in seiner Zuordnungsdatei<cache/>
。C
/ U
/ D
Nach dem Vorgang werden standardmäßig alle Dateien in diesem Bereich angezeigtselect
Der Cache wird seinclear
。