MyBatis avec Spring

Haut de persistance

Je viens d'annoncer le nouveau cours Learn Spring , axé sur les principes de base de Spring 5 et Spring Boot 2:

>> VOIR LE COURS

1. Introduction

MyBatis est l'un des frameworks open source les plus couramment utilisés pour implémenter l'accès aux bases de données SQL dans les applications Java.

Dans ce rapide tutoriel, nous présenterons comment intégrer MyBatis avec Spring et Spring Boot.

Pour ceux qui ne sont pas encore familiarisés avec ce framework, n'oubliez pas de consulter notre article sur l'utilisation de MyBatis.

2. Définition du modèle

Commençons par définir un POJO simple que nous utiliserons tout au long de notre article:

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

Et un fichier SQL schema.sql équivalent :

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

Ensuite, créons un fichier data.sql , qui insère simplement un enregistrement dans notre table articles :

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

Les deux fichiers SQL doivent être inclus dans le chemin de classe.

3. Spring Config

Pour commencer à utiliser MyBatis, nous devons inclure deux dépendances principales - MyBatis et MyBatis-Spring:

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

En dehors de cela, nous aurons besoin de dépendances Spring de base:

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

Dans nos exemples, nous utiliserons la base de données intégrée H2 pour simplifier la configuration et la classe EmbeddedDatabaseBuilder du module spring-jdbc pour la configuration:

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

3.1. Configuration basée sur les annotations

Spring simplifie la configuration de MyBatis. Les seuls éléments requis sont javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory et au moins un mappeur.

Commençons par créer une classe de configuration:

@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(); } }

Nous avons également appliqué une annotation @MapperScan de MyBatis-Spring qui scanne les packages définis et récupère automatiquement les interfaces à l'aide de l'une des annotations du mappeur, telles que @Select ou @Delete.

L'utilisation de @MapperScan garantit également que chaque mappeur fourni est automatiquement enregistré en tant que Bean et peut être utilisé ultérieurement avec l' annotation @Autowired .

Nous pouvons maintenant créer une interface simple ArticleMapper :

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

Et enfin, testez notre configuration:

@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"); } }

Dans l'exemple ci-dessus, nous avons utilisé MyBatis pour récupérer le seul enregistrement que nous avons inséré précédemment dans notre fichier data.sql .

3.2. Configuration basée sur XML

Comme décrit précédemment, pour utiliser MyBatis avec Spring, nous avons besoin de Datasource , de SqlSessionFactory et d'au moins un mappeur.

Créons les définitions de bean requises dans le fichier de configuration beans.xml :

Dans cet exemple, nous avons également utilisé le schéma XML personnalisé fourni par spring-jdbc pour configurer notre source de données H2.

Pour tester cette configuration, nous pouvons réutiliser la classe de test précédemment implémentée. Cependant, nous devons ajuster la configuration du contexte, ce que nous pouvons faire en appliquant l'annotation:

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

4. Spring Boot

Spring Boot fournit des mécanismes qui simplifient encore plus la configuration de MyBatis avec Spring.

Tout d'abord, ajoutons la dépendance mybatis-spring-boot-starter à notre pom.xml :

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

Par défaut, si nous utilisons une fonctionnalité de configuration automatique, Spring Boot détecte la dépendance H2 à partir de notre chemin de classe et configure à la fois la source de données et SqlSessionFactory pour nous. De plus, il exécute également schema.sql et data.sql au démarrage.

Si nous n'utilisons pas de base de données embarquée, nous pouvons utiliser la configuration via un fichier application.yml ou application.properties ou définir un bean Datasource pointant vers notre base de données.

La seule chose qu'il nous reste à faire est de définir une interface de mappeur, de la même manière qu'avant, et de l'annoter avec l' annotation @Mapper de MyBatis. En conséquence, Spring Boot analyse notre projet, à la recherche de cette annotation, et enregistre nos mappeurs en tant que beans.

Après cela, nous pouvons tester notre configuration en utilisant la classe de test précédemment définie en appliquant les annotations de spring-boot-starter-test :

@RunWith(SpringRunner.class) @SpringBootTest

5. Conclusion

Dans cet article, nous avons exploré plusieurs façons de configurer MyBatis avec Spring.

Nous avons examiné des exemples d'utilisation de la configuration basée sur les annotations et XML et montré les fonctionnalités de configuration automatique de MyBatis avec Spring Boot.

Comme toujours, le code complet utilisé dans cet article est disponible à l'adresse over sur GitHub.

Fond de persistance

Je viens d'annoncer le nouveau cours Learn Spring , axé sur les principes de base de Spring 5 et Spring Boot 2:

>> VOIR LE COURS