[JAVA] Änderungen im Mybatis-Spring-Boot-Starter 2.1

Wir haben die Änderungen in 2.1, die am 15. Juli 2019 veröffentlicht wurden, zusammengefasst. Diese Änderung entfernt die Unterstützung für Spring Boot 2.0.x, das bereits in EOL enthalten ist, und erfordert Spring Boot 2.1 oder höher.

Darüber hinaus sollte beachtet werden

Bitte sehen Sie auch bei Bedarf nach.

NOTE:

Übrigens ist die Wartung von mybatis-spring-boot-Starter 2.0.x im Grunde abgeschlossen (wir werden überlegen, ob ein Patch bereitgestellt werden soll, wenn ein schwerwiegender Fehler usw. gemeldet wird, aber im Grunde Schlägt ein Versions-Upgrade vor).

Darüber hinaus wird die Wartung für Spring Boot 1.5.x (Spring Framework 4.3.x) in Version 1.3.x fortgesetzt. Es wird jedoch angekündigt, dass Spring Boot 1.5.x bis 2019/8 EOL sein wird. Da dies geschehen ist, wird die Wartung von Version 1.3.x gleichzeitig abgeschlossen (= die Wartung wird durch Veröffentlichung von 1.3.5 am Ende abgeschlossen).

Es wurde berichtet, dass in dieser Version Fehler vorhanden sind. Daher sollten Problemumgehungen angewendet werden, wenn die Bedingungen für die Fehler erfüllt sind. Der Fehler wird in mybatis-spring-boot-Starter 2.1.1 (mybtis-spring 2.0.3) behoben, das voraussichtlich Mitte Oktober 2019 veröffentlicht wird. (Hinzugefügt am 21.07.2019)

Erforderliche Version der abhängigen Bibliothek

Erforderliche Version von Java

Abhängige Aktualisierung der Bibliotheksversion

In Version 2.1 wurden die folgenden Bibliotheksversionen aktualisiert.

Bibliotheksname 2.0.1 Version 2.1.Version von 0 Ergänzung
MyBatis 3.5.1 3.5.2 -
MyBatis Spring 2.0.1 2.0.2 Aus Gründen der API-Kompatibilität MyBatis Spring 2.0+Wenn ja, funktioniert es aber2, um alle Funktionen zu nutzen.0.2+Ist notwendig
MyBatis Velocity(Optional) - 2.1.0 Die API-Kompatibilität beträgt 2.1.Es funktioniert sogar vor 0, aber2, um alle Funktionen zu nutzen.1.0+Ist notwendig
MyBatis Freemarker(Optional) - 1.2.0 Die API-Kompatibilität beträgt 1.2.Es funktioniert sogar vor 0, aber1, um alle Funktionen zu nutzen.2.0+Ist notwendig
MyBatis Thymeleaf(Optional) - 1.0.1
Spring Boot 2.0.9.RELEASE 2.1.6.RELEASE 2 mit Travis CI.2.0-Getestet mit SNAPSHOT

Automatische Erkennung von "Sprachtreiber"

Unterstützt einen Mechanismus zum automatischen Erkennen des im DI-Container registrierten "LanguageDriver" und zum Anwenden auf MyBatis. Mit dieser Unterstützung kann die vom Entwickler erstellte LanguageDriver-Klasse auf MyBatis angewendet werden, indem die Bean wie folgt definiert wird.

Bean-Definitionsbeispiel für den ursprünglichen Sprachtreiber


@Bean
MyLanguageDriver myLanguageDriver() {
  return MyLanguageDriver();
}

Wenn im DI-Container nur eine Bean von "LanguageDriver" erkannt wird, wird der erkannte "LanguageDriver" als Standardklasse "LanguageDriver" behandelt (wenn mehrere Beans erkannt werden, werden die Standardeinstellungen von MyBatis selbst verwendet. Ein bestimmter "XMLLanguageDriver" wird unverändert angewendet. Wenn Sie die Standardklasse "LanguageDriver" nicht durch die automatische Erkennungsfunktion ändern möchten oder wenn Sie die Standardklasse "LanguageDriver" ändern möchten, wenn Sie mehrere "LanguageDriver" zusammen verwenden, gehen Sie wie folgt vor. Stellen Sie sicher, dass Sie die Standardklasse "LanguageDriver" mithilfe der Eigenschaft "default-scripting-language-driver" (eine in Version 2.1 hinzugefügte Eigenschaft) explizit angeben.

Mybatis.default-scripting-language-driver hinzugefügt

Bis zur Version 2.0 ist die Methode zum Angeben der standardmäßig zu verwendenden "LanguageDriver" -Klasse die Eigenschaft "mybatis.configuration.default-scripting-language" (Eigenschaft zum direkten Festlegen des Werts für die von MyBatis selbst bereitgestellte Konfigurationsklasse). Diese Eigenschaft wurde jedoch abgeschafft (nicht verwendet) und neu "mybatis", da sie in Kombination mit der später beschriebenen "Unterstützung für die automatische Konfiguration des" Sprachtreibers "möglicherweise nicht wie erwartet funktioniert. .Default-scripting-language-driver` hinzugefügt.

mybatis.default-scripting-language-driver={FQCN der Standard-LanguageDriver-Klasse}

Unterstützung für die automatische Konfiguration von Sprachtreiber

Unterstützt den automatischen Konfigurationsmechanismus für die folgenden drei echten MyBatis-Submodule (LanguageDriver).

Wenn Sie die JAR-Dateien der oben genannten drei Submodule zum Klassenpfad hinzufügen, werden die von den Submodulen bereitgestellten Beans der LanguageDriver-Klasse automatisch im DI-Container registriert und auf MyBatis angewendet. Wenn der Entwickler die vom obigen Submodul bereitgestellte LanguageDriver-Klasse explizit als Bean definiert, wird keine automatische Konfiguration durchgeführt.

WARNING:

Wenn alle folgenden Bedingungen erfüllt sind, geht die Abwärtskompatibilität verloren und es sind zusätzliche Maßnahmen erforderlich.

  • Nur ein Glas der oben genannten drei Submodule (Mybatis-Geschwindigkeit, Mybatis-Freemarker, Mybatis-Thymeleaf) ** befindet sich auf dem Klassenpfad **
  • Der Standard-LanguageDriver ist nicht der vom Submodul bereitgestellte LanguageDriver.

Wenn die Bedingungen erfüllt sind, wird die vom Submodul bereitgestellte Klasse "LanguageDriver" auf den Standardwert "LanguageDriver" gesetzt. Daher muss der Standard "LanguageDriver" wie unten gezeigt explizit angegeben werden. Es gibt.

mybatis.default-scripting-language-driver={FQCN der Standard-LanguageDriver-Klasse}

Verwenden von MyBatis Velocity

Durch Hinzufügen der folgenden Artefakte wird "org.mybatis.scripting.velocity.VelocityLanguageDriver" ("org.mybatis.scripting.velocity.Driver", wenn Sie mybatis-speed 2.0 oder früher angeben) auf MyBatis angewendet.

pom.xml


<!--Bei Verwendung von Mybatis Velocity-->
<dependency>
  <groupId>org.mybatis.scripting</groupId>
  <artifactId>mybatis-velocity</artifactId>
  <version>2.1.0</version>
</dependency>

Wenn Sie mybatis-speed 2.1.0 oder höher verwenden, können Sie mithilfe des Konfigurationseigenschaftsmechanismus das Verhalten von MyBatis Velocity und der in MyBatis Velocity verwendeten Velocity-Vorlagen-Engine anpassen.

src/main/resources/application.properties


#
# mybatis.scripting-language-driver.velocity.{key} = {value}Format
#

#Eigenschaften, die das Verhalten von Velocity selbst anpassen
# mybatis.scripting-language-driver.velocity.velocity-settings.{name} = {value}Format
# {name}Die Eigenschaften, auf die eingestellt werden kann, finden Sie im Referenzdokument.
mybatis.scripting-language-driver.velocity.velocity-settings.runtime.custom_directives = com.example.directives.MyDirective

#Zusätzliche Attribute, die an die Vorlagen-Engine übergeben werden sollen(Objekt)Eigenschaften, die angeben
# mybatis.scripting-language-driver.velocity.additional-context-attributes.{name} = {value}
mybatis.scripting-language-driver.velocity.additional-context-attributes.likeEscape = com.example.helpers.LikeEscape

Verwendung von MyBatis Free Marker

Fügen Sie die folgenden Artefakte hinzu, um "org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver" auf MyBatis anzuwenden.

pom.xml


<dependency>
  <groupId>org.mybatis.scripting</groupId>
  <artifactId>mybatis-freemarker</artifactId>
  <version>1.2.0</version>
</dependency>

Wenn Sie mybatis-speed 1.2.0 oder höher verwenden, können Sie das Verhalten der in MyBatis FreeMarker verwendeten Vorlagen-Engine von MyBatis FreeMarker und FreeMarker mithilfe des Mechanismus der Konfigurationseigenschaft anpassen.

src/main/resources/application.properties


#
# mybatis.scripting-language-driver.freemarker.{key} = {value}Format
#

#Eigenschaften, die den Betrieb von FreeMarker selbst anpassen
# mybatis.scripting-language-driver.freemarker.freemarker-settings.{name} = {value}Format
# {name}Die Eigenschaften, auf die eingestellt werden kann, finden Sie im Referenzdokument.
mybatis.scripting-language-driver.freemarker.freemarker-settings.interpolation_syntax = dollar

#Eigenschaften, die das Verhalten von MyBatis FreeMarker anpassen
# mybatis.scripting-language-driver.freemarker.{name} = {value}
# {name}Die Eigenschaften, auf die eingestellt werden kann, finden Sie im Referenzdokument.
mybatis.scripting-language-driver.freemarker.template-file.base-dir = sql

Verwendung von MyBatis Thymeleaf

Fügen Sie die folgenden Artefakte hinzu, um "org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver" auf MyBatis anzuwenden.

pom.xml


<dependency>
  <groupId>org.mybatis.scripting</groupId>
  <artifactId>mybatis-thymeleaf</artifactId>
  <version>1.0.1</version>
</dependency>

Sie können den Konfigurationseigenschaftsmechanismus verwenden, um das Verhalten der Thymeleaf-Vorlagen-Engine anzupassen, die in MyBatis Thymeleaf und MyBatis Thymeleaf verwendet wird.

src/main/resources/application.properties


#
# mybatis.scripting-language-driver.thymeleaf.{key} = {value}Format
#

#Eigenschaften, die das Verhalten von MyBatis Thymeleaf anpassen
# mybatis.scripting-language-driver.thymeleaf.{name} = {value}
# {name}Die Eigenschaften, auf die eingestellt werden kann, finden Sie im Referenzdokument.
mybatis.scripting-language-driver.thymeleaf.use2way = false
mybatis.scripting-language-driver.thymeleaf.template-file.cache-enabled = false
mybatis.scripting-language-driver.thymeleaf.dialect.like-additional-escape-target-chars = %, _

Unterstützung für die Steuerung der Mapper-Verzögerungsinitialisierung

Unterstützung für die Option zur Steuerung des Initialisierungszeitpunkts von Mapper hinzugefügt, der im DI-Container registriert ist (wenn der DI-Container initialisiert, injiziert oder verwendet wird). Das Standardverhalten ist, dass alle Mapper initialisiert werden, wenn der DI-Container initialisiert wird.

Diese Option verursacht einen Fehler beim Aufrufen von Mappr-Methoden unter bestimmten Bedingungen, wenn der von Spring Boot 2.2 unterstützte Mechanismus zur verzögerten Bean-Initialisierung aktiviert wird (die offizielle Version wurde zum Zeitpunkt der Veröffentlichung noch nicht veröffentlicht). Daher wurde es hinzugefügt, damit der Benutzer steuern kann, ob die Verzögerungsinitialisierung auf Mapper angewendet wird oder nicht. Wenn Sie den Fehler nur vermeiden möchten, können Sie die verzögerte Initialisierung für Mapper unbedingt deaktivieren. Ich denke jedoch, dass der Mechanismus für die verzögerte Initialisierung zum Zeitpunkt der Entwicklung (Test) wirksam ist, also MyBatis (mybatis-spring). & mybatis-spring-boot-Starter) Aktiviert, um die verzögerte Initialisierung von Mapper unabhängig zu steuern. Weitere Informationen finden Sie unter Informationen zur mybatis.lazy-Initialisierung in mybatis-spring-boot 2.1.0 hinzugefügt.

NOTE:

Der in dieser Version bereitgestellte Mechanismus für die verzögerte Initialisierung gilt nur für MyBatis (mybatis-spring & mybatis-spring-boot-Starter) und kann daher auch in der Spring Boot 2.1-Serie verwendet werden.

Automatische Erkennung von "TypeHandler"

Unterstützt den Mechanismus, um im DI-Container registrierten TypeHandler automatisch zu erkennen und auf MyBatis anzuwenden. Mit dieser Unterstützung kann die vom Entwickler erstellte TypeHandler-Klasse auf MyBatis angewendet werden, indem die Bean wie folgt definiert wird.

Bean-Definitionsbeispiel für den ursprünglichen TypeHandler


@Bean
MyTypeHandler myTypeHandler() {
  return MyTypeHandler();
}

"MapperScannerConfigurer" wurde zur Deaktivierungsbedingung für den Mapper-Scan hinzugefügt

Wenn der Entwickler Mapper explizit für die Registrierung im DI-Container definiert hat, deaktiviert mybatis-spring-boot-start das automatische Scannen von Mapper. Bis zur Version 2.0 war das automatische Scannen deaktiviert, wenn eine der folgenden Bedingungen erfüllt war:

In Version 2.1 zusätzlich zu den oben genannten

In diesem Fall wird das automatische Scannen von Mapper deaktiviert.

Behoben "Doppelter Fehler beim Scannen von Alias"

In mybatis-spring 2.0.1 hängt die Version 2.0.1 unter bestimmten Bedingungen von "Doppelter Fehler beim Scannen von Typ-Aliasen ab. / kazuki43zoo / items / 38a24e051359e39c012c #% E3% 83% 99% E3% 83% BC% E3% 82% B9% E3% 83% 91% E3% 83% 83% E3% 82% B1% E3% 83% BC% E3% 82% B8% E6% 8C% 87% E5% AE% 9A% E6% 99% 82% E3% 81% AE% E3% 83% AF% E3% 82% A4% E3% 83% AB% E3% 83% 89% E3% 82% AB% E3% 83% BC% E3% 83% 89% E3% 82% 92% E3% 82% B5% E3% 83% 9D% E3% 83% BC% E3% 83% 88) ”, aber es wurde in mybatis-spring 2.0.2 behoben, von dem Version 2.1.0 abhängt.

Attribut "Eigenschaften" zu "@ MybatisTest" hinzugefügt

Es wurde ein Attribut (properties) hinzugefügt, um Eigenschaften (key = value format) für @ MybatisTest anzugeben. Diese Unterstützung macht die Verwendung von "@ TestPropertySource" überflüssig, wenn Sie eine Eigenschaft haben, die Sie nur während des Tests anwenden möchten. Diese Unterstützung ist eine Rückmeldung des Mechanismus, der in Spring Boot 2.1 zu "@ JdbcTest" zu "@ MybatisTest" hinzugefügt wurde.

@MybatisTest(properties = {
  "logging.level.org.springframework.jdbc=debug",
  "spring.datasource.schema=classpath:TodoMapperTests/schema.sql"
  })
public class TodoMapperTests {
  // ...
}

Die Dokumentquelldatei wurde von XDOC in Markdown geändert

Die Quelldatei des mit dem Maven Site Plugin generierten Referenzdokuments wurde vom XDOC-Format in das Markdown-Format geändert. Da ich gerade das Format der Quelldatei geändert habe, ist der Inhalt des Dokuments im Wesentlichen derselbe (mit Ausnahme des Anwendungsteils der in 2.1.0 unterstützten Änderungen), aber ... "Code-Highlight des Quellcodes" ist Es ist weg (ich untersuche derzeit, ob es sich um eine Einschränkung bei der Verwendung von Markdown handelt oder ob das Plugin falsch verwendet wird?).

Aufgrund dieser Unterstützung ist das Code-Highlight aus dem Post-Build-Dokument verschwunden. Mithilfe des Markdown-Formats kann jedoch über GitHub auf das neueste Dokument (= Snapshot-Versionsdokument) verwiesen werden. (= Ich habe vom XDOC-Format zum Markdown-Format gewechselt, um diesem Verdienst Vorrang einzuräumen.)

Fügen Sie eine einfache Probe hinzu

In Version 2.1 haben wir die Variation von Beispiel erhöht, um den Integrationstest zu verbessern. Es war.

Sprachtreiber bezogen

Beispielprojektname Erläuterung
mybatis-spring-boot-sample-velocity MyBatis Velocity 2.1+Basis einfaches Beispielprojekt
mybatis-spring-boot-sample-velocity-legacy MyBatis Velocity 2.0-basiertes einfaches Beispielprojekt
mybatis-spring-boot-sample-freemarker MyBatis FreeMarker 1.2+Basis einfaches Beispielprojekt
mybatis-spring-boot-sample-velocity-legacy MyBatis FreeMarker 1.1.x-basiertes einfaches Beispielprojekt
mybatis-spring-boot-sample-thymeleaf Einfaches Beispielprojekt von MyBatis Thymeleaf

JVM sprachbezogen

Beispielprojektname Erläuterung
mybatis-spring-boot-sample-groovy Einfaches Beispielprojekt mit Groovy
mybatis-spring-boot-sample-kotlin Einfaches Beispielprojekt mit Kotlin

Recommended Posts

Änderungen in mybatis-spring-boot-Starter 2.0
Änderungen im Mybatis-Spring-Boot-Starter 2.1
Änderungen im Mybatis-Spring-Boot-Starter 1.3
Änderungen im Mybatis-Spring-Boot-Starter 1.2
Änderungen in Mockito 2
Änderungen in Java 11
Änderungen in JUnit5M4-> M5
Änderungen des Kernstandorts in iOS 14
Wichtige Änderungen in Spring Boot 1.5
Java-Versionsnotation, die sich in Java 10 ändert
Wichtige Änderungen in der Kernfunktionalität von Spring Framework 5.0