Рубрики
Без рубрики

MyBatis с весной

Посмотрите, как интегрировать MyBatis с Spring и Spring Boot.

Автор оригинала: Jędrzej Frankowski.

1. введение

MyBatis является одним из наиболее часто используемых фреймворков с открытым исходным кодом для реализации доступа к базам данных SQL в приложениях Java.

В этом кратком руководстве мы расскажем, как интегрировать MyBatis с Spring и Spring Boot.

Для тех, кто еще не знаком с этой структурой, обязательно ознакомьтесь с нашей статьей о работе с MyBatis .

2. Определение модели

Давайте начнем с определения простого POJO, которое мы будем использовать на протяжении всей нашей статьи:

public class Article {
    private Long id;
    private String title;
    private String author;

    // constructor, standard getters and setters
}

И эквивалентный файл SQL schema.sql :

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

Далее давайте создадим файл data.sql , который просто вставит одну запись в нашу таблицу articles :

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

Оба файла SQL должны быть включены в путь к классу .

3. Конфигурация пружины

Чтобы начать использовать MyBatis, мы должны включить две основные зависимости — MyBatis и MyBatis-Spring :


    org.mybatis
    mybatis
    3.5.2



    org.mybatis
    mybatis-spring
    2.0.2

Кроме того, нам понадобятся базовые Весенние зависимости :


    org.springframework
    spring-context
    5.1.8.RELEASE



    org.springframework
    spring-beans
    5.1.8.RELEASE

В наших примерах мы будем использовать встроенную базу данных H2 для упрощения настройки и класс EmbeddedDatabaseBuilder из модуля spring-jdbc для настройки:


    com.h2database
    h2
    1.4.199



    org.springframework
    spring-jdbc
    5.1.8.RELEASE

3.1. Конфигурация На основе аннотаций

Spring упрощает настройку для MyBatis. Единственными необходимыми элементами являются javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory и по крайней мере один картограф.

Во-первых, давайте создадим класс конфигурации:

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

Мы также применили аннотацию @MapperScan от MyBatis-Spring, которая сканирует определенные пакеты и автоматически подбирает интерфейсы, используя любую из аннотаций mapper, например @Select или @Delete.

Использование @MapperScan также гарантирует, что каждый предоставленный картограф автоматически регистрируется как Bean и впоследствии может использоваться с аннотацией @Autowired .

Теперь мы можем создать простой ArticleMapper интерфейс:

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

И, наконец, протестируйте нашу установку:

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

В приведенном выше примере мы использовали MyBatis для извлечения единственной записи, которую мы ранее вставили в наш файл data.sql .

3.2. Конфигурация на основе XML

Как было описано ранее, для использования MyBatis с Spring нам нужны Источник данных , SqlSessionFactory и по крайней мере один картограф.

Давайте создадим необходимые определения бобов в beans.xml файл конфигурации:


    
    

    

    



    
    

В этом примере мы также использовали пользовательскую XML-схему, предоставленную spring-jdbc для настройки нашего источника данных H2.

Чтобы проверить эту конфигурацию, мы можем повторно использовать ранее реализованный тестовый класс. Однако нам нужно настроить конфигурацию контекста, что мы можем сделать, применив аннотацию:

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

4. Пружинный ботинок

Spring Boot предоставляет механизмы, которые еще больше упрощают настройку MyBatis с помощью Spring.

Во-первых, давайте добавим mybatis-spring-boot-starter зависимость к вашему pom.xml :


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

По умолчанию, если мы используем функцию автоматической настройки, Spring Boot обнаруживает зависимость H2 от нашего пути к классу и настраивает для нас как Источник данных , так и SqlSessionFactory . Кроме того, он также выполняет как schema.sql , так и data.sql при запуске.

Если мы не используем встроенную базу данных, мы можем использовать конфигурацию через файл application.yml или application.properties или определить Источник данных bean, указывающий на нашу базу данных.

Единственное, что нам осталось сделать, это определить интерфейс mapper таким же образом, как и раньше, и аннотировать его аннотацией @Mapper из MyBatis. В результате Spring Boot сканирует наш проект в поисках этой аннотации и регистрирует наши картографы как бобы.

После этого мы можем протестировать нашу конфигурацию с помощью ранее определенного тестового класса, применив аннотации из spring-boot-starter-test :

@RunWith(SpringRunner.class)
@SpringBootTest

5. Заключение

В этой статье мы рассмотрели несколько способов настройки MyBatis с помощью Spring.

Мы рассмотрели примеры использования конфигурации на основе аннотаций и XML и показали функции автоматической настройки MyBatis с помощью Spring Boot.

Как всегда, полный код, используемый в этой статье, доступен на GitHub .