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

Wir haben die am 10. April 2017 veröffentlichten 1.3 Änderungen zusammengefasst.

Darüber hinaus sollte beachtet werden

Bitte sehen Sie.

Note: ** 21.08.2017: Nachtrag ** Änderungen in Version 1.3.1 hinzugefügt. ** 07.09.2019: Nachtrag ** Die Änderungen in den Versionen 1.3.2, 1.3.3 und 1.3.4 wurden berücksichtigt.

Erforderliche Version der abhängigen Bibliothek

Zur Verwendung von Version 1.3 sind die folgenden Versionen erforderlich.

Spring Boot 1.5+ erforderlich

Ab Version 1.3 wurde die Annotation "@ MybatisTest" hinzugefügt, die die Bean-Definition unterstützt, die zum Testen der Funktionalität von MyBatis erforderlich ist. Diese Annotation hängt von der von Spring Boot 1.5 unterstützten API ab, also Spring Boot 1.5+ Wird benötigt. Wenn Sie den mybatis-spring-boot-Starter mit der Spring Boot 1.4-Serie verwenden möchten, verwenden Sie bitte die Version 1.2-Serie.

Abhängige Aktualisierung der Bibliotheksversion

In Version 1.3 wurden die folgenden Bibliotheksversionen aktualisiert.

Bibliotheksname 1.2.Version von 0 1.3.Version von 0 1.3.1 Version 1.3.2 Versionen 1.3.Version von 3 1.3.Version von 4
MyBatis 3.4.2 3.4.4 3.4.5 3.4.6 3.4.6 3.4.6
MyBatis Spring 1.3.1 1.3.1 1.3.1 1.3.2 1.3.2 1.3.2
Spring Boot 1.4.3.RELEASE 1.5.2.RELEASE 1.5.6.RELEASE 1.5.10.RELEASE 1.5.19.RELEASE 1.5.20.RELEASE

Note: Im Vergleich zu Version 1.2.1, die gleichzeitig mit Version 1.3.0 veröffentlicht wurde, wurde nur die Version von Spring Boot aktualisiert (1.4.5.RELEASE-> 1.5.2.RELEASE).

Hinzufügen der Schnittstelle "ConfigurationCustomizer"

Eine Rückrufschnittstelle (org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer) zum Anpassen der Bean ( org.apache.ibatis.session.Configuration Bean), die MyBatis-Konfigurationsinformationen mit Java-Code enthält. ) Wurde hinzugefügt. Wenn Sie eine Bean definieren, die diese Schnittstelle wie unten gezeigt implementiert, wird die Methode "configure" von "ConfigurationCustomizer" zurückgerufen, und Sie können Java-Code verwenden, um die Konfiguration von MyBayis abzuschließen. Kann angepasst werden an.

Bean-Definitionsbeispiel für ConfigurationCustomizer mit Lambda-Ausdruck


@Configuration
public class MyBatisConfiguration {
	@Bean
	ConfigurationCustomizer mybatisConfigurationCustomizer() {
		return (configuration) -> {
			// aplication.Implementierter Anpassungscode, der nicht durch Eigenschaften angegeben / ausgedrückt werden kann
			configuration.getTypeHandlerRegistry().register(RoundingMode.class, EnumOrdinalTypeHandler.class);
		};
	}
}

Note:

Die "ConfigurationCustomizer" -Schnittstelle wird ebenfalls auf Version 1.2.1 zurückportiert, die gleichzeitig mit Version 1.3.0 veröffentlicht wurde.

Hinzufügung von "@ MybatisTest" (Mybatis-Spring-Boot-Starter-Test)

Ab Version 1.3 wurde die Annotation "@ MybatisTest" hinzugefügt, um die Bean-Definition zu unterstützen, die beim Testen der Funktionalität von MyBatis erforderlich ist. Dies ist [@ DataJpaTest](http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-testing-spring-", bereitgestellt von Spring Boot. Boot-Applications-Testing-Autoconfigured-JPA-Test) und [@ JdbcTest](http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features -testing-spring-boot-application-testing-autoconfigured-jdbc-test) ist die MyBatis-Version (natürlich entspricht die Verwendung der von Spring Boot bereitgestellten Anmerkung !!). Zusammen mit dieser Unterstützung wurde der "mybatis-spring-boot-Starter-Test" neu eingerichtet, um die zum Testen von MyBatis erforderlichen Bibliotheken zu lösen. Wenn Sie also die von MyBatis bereitgestellten Funktionen testen möchten, , Fügen wir die folgende Definition zu pom.xml hinzu! !!

pom.xml


<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter-test</artifactId>
	<version>1.3.4</version>
	<scope>test</scope>
</dependency>

Wenn Sie beispielsweise die folgende Mapper-Schnittstelle testen möchten,

src/main/java/com/example/mapper/TodoMapper.java


package com.example.mapper;

import com.example.domain.Todo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface TodoMapper {

    @Insert("INSERT INTO todo (title, details, finished) VALUES (#{title}, #{details}, #{finished})")
    @Options(useGeneratedKeys = true)
    void insert(Todo todo);

    @Select("SELECT id, title, details, finished FROM todo WHERE id = #{id}")
    Todo select(int id);

}

Es ist in Ordnung, wenn Sie die folgende Testfallklasse mit @ MybatisTest erstellen.

src/main/java/com/example/mapper/TodoMapperTests.java


package com.example.mapper;

import com.example.domain.Todo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.test.context.junit4.SpringRunner;

import static org.assertj.core.api.Assertions.assertThat;

@RunWith(SpringRunner.class)
@MybatisTest // (1)
public class TodoMapperTests {

    @Autowired
    private TodoMapper todoMapper; // (2)

    @Autowired
    private NamedParameterJdbcOperations jdbcOperations; // (3)

    @Test
    public void insert() {

        // setup
        // none

        // perform test and assertions
        {
            // (4)
            Todo newTodo = new Todo();
            newTodo.setTitle("Trinkparty");
            newTodo.setDetails("Ginza 19:00");
            todoMapper.insert(newTodo);

            // (5)
            Todo actualTodo =
                jdbcOperations.queryForObject("SELECT * FROM todo WHERE id = :id",
                    new MapSqlParameterSource("id", newTodo.getId()),
                    new BeanPropertyRowMapper<>(Todo.class));
            assertThat(actualTodo.getId()).isEqualTo(newTodo.getId());
            assertThat(actualTodo.getTitle()).isEqualTo("Trinkparty");
            assertThat(actualTodo.getDetails()).isEqualTo("Ginza 19:00");
            assertThat(actualTodo.isFinished()).isEqualTo(false);
        }
    }


    @Test
    public void select() {

        // (6)
        // setup
        Todo newTodo = new Todo();
        newTodo.setTitle("Trinkparty");
        newTodo.setDetails("Ginza 19:00");

        GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcOperations.update(
            "INSERT INTO todo (title, details, finished) VALUES(:title, :details, :finished)",
            new BeanPropertySqlParameterSource(newTodo), keyHolder);

        // perform test and assertions
        {
            // (7)
            Todo actualTodo = todoMapper.select(keyHolder.getKey().intValue());

            assertThat(actualTodo.getId()).isEqualTo(keyHolder.getKey().intValue());
            assertThat(actualTodo.getTitle()).isEqualTo("Trinkparty");
            assertThat(actualTodo.getDetails()).isEqualTo("Ginza 19:00");
            assertThat(actualTodo.isFinished()).isEqualTo(false);
        }
    }

}
Artikelnummer Erläuterung
(1) Im Unterricht@MybatisTestIst gegeben. Durch Hinzufügen dieser Anmerkung wird nur die AutoConfigure-Klasse aktiviert, die zum Ausführen von MyBatis erforderlich ist. Standardmäßig wird das Scannen von Komponenten deaktiviert, wodurch verhindert wird, dass Beans ohne Titel während des Tests im DI-Container registriert werden.
(2) Injizieren Sie den zu testenden Mapper.@MybatisTestWenn Sie angeben, generiert die von MyBatis bereitgestellte AutoConfigure eine Bean of Mapper.
(3) Registrierungsdaten überprüfen und Testdaten registrierenNamedParameterJdbcTemplateInjizieren Sie die Bohne von.@MybatisTestWenn du gibstJdbcTemplateWannNamedParameterJdbcTemplateBean ist im DI-Container registriert.
(4) Getestet werdeninsertRufen Sie die Methode auf.
(5) insertÜberprüfen Sie das Ergebnis des Aufrufs der Methode. Hier,NamedParameterJdbcOperationsDie registrierten Daten werden über die Methode von erfasst und die Gültigkeit der registrierten Daten wird überprüft.
(6) selectRegistrieren Sie Testdaten, um die Methode zu testen. Hier,NamedParameterJdbcOperationsDie Testdaten werden nach der Methode von registriert. Darüber hinaus von Spring Framework zur Verfügung gestellt@SqlSie können Testdaten auch mithilfe von Anmerkungen registrieren.
(7) Getestet werdenselectRufen Sie die Methode auf.
(8) selectÜberprüfen Sie das Ergebnis des Aufrufs der Methode.

Wenn Sie den Test in diesem Status ausführen, wird auch die Bean-Definition gelesen, die in der Spring Boot-Anwendungsklasse (Klasse mit @ SpringBootApplication) definiert ist, die im oberen Paket vorhanden ist. Daher ist sie für den MyBatis-Test erforderlich. Fehlende Bohnen können im DI-Container registriert werden. Wenn Sie keine Beans, die für MyBatis-Tests nicht benötigt werden, im DI-Container registrieren möchten, erstellen Sie eine leere Spring Boot-Anwendungsklasse wie die folgende im selben Paket wie die Testfallklasse. Auf diese Weise können Sie die Spring Boot-Anwendungsklasse im oberen Paket deaktivieren.

src/test/java/com/example/mapper/MapperTestApplication.java


package com.example.mapper;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MapperTestApplication {

}

Weitere Informationen finden Sie in der offiziellen Referenz (http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-test-autoconfigure/) und im [@ DataJpaTest]( @ DataJpaTest] von Spring Boot. http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured-jpa-test) und [ @ JdbcTest](http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured-jdbc- Siehe Testreferenz.

Note: Die Annotation "@ MybatisTest" (und "Mybatis-Spring-Boot-Starter-Test") wird ebenfalls auf Version 1.2.1 zurückportiert, die gleichzeitig mit Version 1.3 veröffentlicht wurde.

Verbesserte Eingabevervollständigung von Eigenschaftswerten in der IDE

Bis 1.3.0 funktionierte die Eingabe für einige Eigenschaften (mybatis.configuration.default-scripting-language) nicht, aber" [Hinzufügen zusätzlicher Metadaten] von Spring Boot Bei Verwendung des Mechanismus "(http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#configuration-metadata-additional-metadata)" wird die Eingabe ab 1.3.1 wirksam. Wurde verbessert.

Unterstützt die Angabe von "typeAliasesSuperType" in der Konjugationseigenschaft

[Änderungen in Version 2.0](https://qiita.com/kazuki43zoo/items/38a24e051359e39c012c#%E3%82%B3%E3%83%B3%E3%83%95%E3%82%AE%E3%83 % A5% E3% 83% AC% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3% E3% 83% 97% E3% 83% AD% E3% 83% 91 % E3% 83% 86% E3% 82% A3% E3% 81% A7typealiasessupertype% E3% 81% AE% E6% 8C% 87% E5% AE% 9A% E3% 82% 92% E3% 82% B5% E3 Siehe% 83% 9D% E3% 83% BC% E3% 83% 88). (Unterstützt ab Version 1.3.3)

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