MyBatis с пролетта

Устойчивост отгоре

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА

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 , който просто вмъква един запис в нашата таблица статии :

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

И двата SQL файла трябва да бъдат включени в пътя на класа.

3. Spring Config

За да започнем да използваме 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-пролет, която сканира определени пакети и автоматично улавя интерфейси, използващи един от анотации Mapper, като @ Изберете или @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, се нуждаем от Datasource , SqlSessionFactory и поне един картограф.

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

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

За да тестваме тази конфигурация, можем да използваме повторно внедрения по-рано тестов клас. Трябва обаче да коригираме конфигурацията на контекста, което можем да направим, като приложим пояснението:

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

4. Spring Boot

Spring Boot осигурява механизми, които опростяват още повече конфигурацията на MyBatis с Spring.

Първо, нека добавим зависимостта mybatis-spring-boot-starter към нашия pom.xml :

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

По подразбиране, ако използваме функция за автоматично конфигуриране, Spring Boot открива зависимостта H2 от нашия път на класа и конфигурира за нас както Datasource, така и SqlSessionFactory . Освен това при стартиране изпълнява както schema.sql, така и data.sql .

Ако не използваме вградена база данни, можем да използваме конфигурация чрез файл application.yml или application.properties или да дефинираме компонент Datasource, сочещ към нашата база данни.

Единственото нещо, което ни е останало да направите, е да се определи картограф интерфейс, по същия начин, както и преди, и го поясняват с @Mapper анотация от MyBatis. В резултат Spring Boot сканира нашия проект, търсейки тази анотация и регистрира картографиращите ни като боб.

След това можем да тестваме нашата конфигурация, използвайки предварително дефинирания тестов клас, като приложим анотации от spring-boot-starter-test :

@RunWith(SpringRunner.class) @SpringBootTest

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

В тази статия разгледахме множество начини за конфигуриране на MyBatis с Spring.

Разгледахме примери за използване на базирана на анотации и XML конфигурация и показахме функциите за автоматично конфигуриране на MyBatis с Spring Boot.

Както винаги, пълният код, използван в тази статия, е достъпен в GitHub.

Устойчивост отдолу

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА