Току що обявих новия курс 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.
Устойчивост отдолу