MyBatis mit Frühling

Ausdauer oben

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs

1. Einleitung

MyBatis ist eines der am häufigsten verwendeten Open-Source-Frameworks für die Implementierung des Zugriffs auf SQL-Datenbanken in Java-Anwendungen.

In diesem kurzen Tutorial erfahren Sie, wie Sie MyBatis in Spring und Spring Boot integrieren.

Wenn Sie mit diesem Framework noch nicht vertraut sind, lesen Sie unbedingt unseren Artikel über die Arbeit mit MyBatis.

2. Modell definieren

Beginnen wir mit der Definition eines einfachen POJO, das wir in unserem Artikel verwenden werden:

public class Article { private Long id; private String title; private String author; // constructor, standard getters and setters }

Und eine äquivalente SQL- Datei schema.sql :

CREATE TABLE IF NOT EXISTS `ARTICLES`( `id` INTEGER PRIMARY KEY, `title` VARCHAR(100) NOT NULL, `author` VARCHAR(100) NOT NULL );

Als nächstes wollen wir eine erstellen data.sql - Datei, die einen Datensatz in unsere fügt einfach Artikel Tabelle:

INSERT INTO ARTICLES VALUES (1, 'Working with MyBatis in Spring', 'Baeldung');

Beide SQL-Dateien müssen im Klassenpfad enthalten sein.

3. Spring Config

Um MyBatis verwenden zu können, müssen zwei Hauptabhängigkeiten berücksichtigt werden - MyBatis und MyBatis-Spring:

 org.mybatis mybatis 3.5.2   org.mybatis mybatis-spring 2.0.2 

Abgesehen davon benötigen wir grundlegende Spring-Abhängigkeiten:

 org.springframework spring-context 5.1.8.RELEASE   org.springframework spring-beans 5.1.8.RELEASE 

In unseren Beispielen verwenden wir die eingebettete H2-Datenbank, um das Setup und die EmbeddedDatabaseBuilder- Klasse aus dem spring-jdbc- Modul für die Konfiguration zu vereinfachen :

 com.h2database h2 1.4.199   org.springframework spring-jdbc 5.1.8.RELEASE 

3.1. Anmerkungsbasierte Konfiguration

Spring vereinfacht die Konfiguration für MyBatis. Die einzigen erforderlichen Elemente sind javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory und mindestens ein Mapper.

Erstellen wir zunächst eine Konfigurationsklasse:

@Configuration @MapperScan("com.baeldung.mybatis") public class PersistenceConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("schema.sql") .addScript("data.sql") .build(); } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource()); return factoryBean.getObject(); } }

Wir haben auch eine @ MapperScan- Annotation von MyBatis-Spring angewendet , die definierte Pakete scannt und Schnittstellen mithilfe von Mapper-Annotationen wie @Select oder @Delete automatisch aufnimmt.

Durch die Verwendung von @MapperScan wird außerdem sichergestellt, dass jeder bereitgestellte Mapper automatisch als Bean registriert wird und später mit der Annotation @Autowired verwendet werden kann .

Wir können jetzt eine einfache ArticleMapper- Oberfläche erstellen:

public interface ArticleMapper { @Select("SELECT * FROM ARTICLES WHERE id = #{id}") Article getArticle(@Param("id") Long id); }

Und zum Schluss testen Sie unser Setup:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = PersistenceConfig.class) public class ArticleMapperIntegrationTest { @Autowired ArticleMapper articleMapper; @Test public void whenRecordsInDatabase_shouldReturnArticleWithGivenId() { Article article = articleMapper.getArticle(1L); assertThat(article).isNotNull(); assertThat(article.getId()).isEqualTo(1L); assertThat(article.getAuthor()).isEqualTo("Baeldung"); assertThat(article.getTitle()).isEqualTo("Working with MyBatis in Spring"); } }

Im obigen Beispiel haben wir MyBatis verwendet, um den einzigen Datensatz abzurufen, den wir zuvor in unsere Datei data.sql eingefügt haben .

3.2. XML-basierte Konfiguration

Wie bereits beschrieben, benötigen wir zur Verwendung von MyBatis mit Spring Datasource , SqlSessionFactory und mindestens einen Mapper.

Erstellen wir die erforderlichen Bean-Definitionen in der Konfigurationsdatei beans.xml :

In diesem Beispiel haben wir auch das von spring-jdbc bereitgestellte benutzerdefinierte XML-Schema verwendet , um unsere H2 -Datenquelle zu konfigurieren.

Um diese Konfiguration zu testen, können wir die zuvor implementierte Testklasse wiederverwenden. Wir müssen jedoch die Kontextkonfiguration anpassen, was wir durch Anwenden der Anmerkung tun können:

@ContextConfiguration(locations = "classpath:/beans.xml")

4. Spring Boot

Spring Boot bietet Mechanismen, die die Konfiguration von MyBatis mit Spring noch weiter vereinfachen.

Fügen wir zunächst die Abhängigkeit mybatis-spring-boot-Starter zu unserer pom.xml hinzu :

 org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.0 

Wenn wir eine automatische Konfigurationsfunktion verwenden, erkennt Spring Boot standardmäßig die H2-Abhängigkeit von unserem Klassenpfad und konfiguriert sowohl Datasource als auch SqlSessionFactory für uns. Darüber hinaus werden beim Start sowohl schema.sql als auch data.sql ausgeführt .

Wenn wir keine eingebettete Datenbank verwenden, können wir die Konfiguration über eine Datei application.yml oder application.properties verwenden oder eine Datenquellen- Bean definieren , die auf unsere Datenbank verweist.

Das einzige, was wir noch tun müssen, ist, eine Mapper-Schnittstelle auf die gleiche Weise wie zuvor zu definieren und sie mit der @ Mapper- Annotation von MyBatis zu versehen. Infolgedessen durchsucht Spring Boot unser Projekt nach dieser Anmerkung und registriert unsere Mapper als Beans.

Danach können wir unsere Konfiguration mit der zuvor definierten Testklasse testen, indem wir Anmerkungen aus dem Spring-Boot-Starter-Test anwenden :

@RunWith(SpringRunner.class) @SpringBootTest

5. Schlussfolgerung

In diesem Artikel haben wir verschiedene Möglichkeiten zum Konfigurieren von MyBatis mit Spring untersucht.

Wir haben uns Beispiele für die Verwendung von annotationsbasierter und XML-Konfiguration angesehen und die Funktionen zur automatischen Konfiguration von MyBatis mit Spring Boot gezeigt.

Wie immer ist der vollständige Code, der in diesem Artikel verwendet wird, auf GitHub verfügbar.

Persistenz unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs