MyBatis med våren

Uthållighetstopp

Jag tillkännagav just den nya Learn Spring- kursen, med fokus på grunderna i Spring 5 och Spring Boot 2:

>> KONTROLLERA KURSET

1. Introduktion

MyBatis är en av de vanligaste ramarna för öppen källkod för implementering av SQL-databasåtkomst i Java-applikationer.

I den här snabbhandledningen presenterar vi hur du integrerar MyBatis med Spring and Spring Boot.

För de som ännu inte känner till detta ramverk, se till att kolla in vår artikel om att arbeta med MyBatis.

2. Definiera modellen

Låt oss börja med att definiera enkel POJO som vi ska använda i hela vår artikel:

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

Och en motsvarande SQL schema.sql- fil:

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

Nästa, låt oss skapa en data.sql fil, som helt enkelt infogar en post i våra artiklar tabell:

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

Båda SQL-filerna måste ingå i klassvägen.

3. Vårkonfig

För att börja använda MyBatis måste vi inkludera två huvudberoenden - MyBatis och MyBatis-Spring:

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

Bortsett från det behöver vi grundläggande vårberoende:

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

I våra exempel använder vi den inbäddade H2-databasen för att förenkla installationen och EmbeddedDatabaseBuilder- klassen från våren-jdbc- modulen för konfiguration:

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

3.1. Kommentarbaserad konfiguration

Våren förenklar konfigurationen för MyBatis. De enda nödvändiga elementen är javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory och minst en mapper.

Låt oss först skapa en konfigurationsklass:

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

Vi tillämpade också en @MapperScan- kommentar från MyBatis-Spring som skannar definierade paket och plockar automatiskt upp gränssnitt med hjälp av någon av mapparnoteringarna, som @ Select eller @ Delet.

Att använda @MapperScan säkerställer också att varje tillhandahållen mapper registreras automatiskt som en Bean och kan senare användas med @Autowired- kommentaren.

Vi kan nu skapa ett enkelt ArticleMapper- gränssnitt:

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

Och slutligen, testa vår inställning:

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

I exemplet ovan har vi använt MyBatis för att hämta den enda posten som vi införde tidigare i vår data.sql- fil.

3.2. XML-baserad konfiguration

Som tidigare beskrivits, för att använda MyBatis med Spring, behöver vi Datakälla , SqlSessionFactory och minst en mapper.

Låt oss skapa de nödvändiga bönedefinitionerna i konfigurationsfilen beans.xml :

I det här exemplet använde vi också det anpassade XML-schemat som tillhandahålls av spring-jdbc för att konfigurera vår H2-datakälla.

För att testa denna konfiguration kan vi återanvända den tidigare implementerade testklassen. Vi måste dock justera kontextkonfigurationen, vilket vi kan göra genom att använda anteckningen:

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

4. Fjäderkänga

Spring Boot tillhandahåller mekanismer som förenklar konfigurationen av MyBatis med Spring ännu mer.

Låt oss först lägga till mybatis-spring-boot-starter- beroendet till vår pom.xml :

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

Som standard, om vi använder en automatisk konfigurationsfunktion, upptäcker Spring Boot H2-beroendet från vår klassväg och konfigurerar både datakälla och SqlSessionFactory för oss. Dessutom kör den också schema.sql och data.sql vid start.

Om vi ​​inte använder en inbäddad databas kan vi använda konfiguration via en application.yml- eller application.properties- fil eller definiera en datakällböna som pekar på vår databas.

Det enda vi har kvar att göra är att definiera ett mappargränssnitt på samma sätt som tidigare och kommentera det med @Mapper- anteckningen från MyBatis. Som ett resultat skannar Spring Boot vårt projekt och letar efter den anteckningen och registrerar våra kartläggare som bönor.

Därefter kan vi testa vår konfiguration med den tidigare definierade testklassen genom att använda anteckningar från spring-boot-starter-test :

@RunWith(SpringRunner.class) @SpringBootTest

5. Sammanfattning

I den här artikeln undersökte vi flera sätt att konfigurera MyBatis med Spring.

Vi tittade på exempel på att använda anteckningsbaserad och XML-konfiguration och visade de automatiska konfigurationsfunktionerna i MyBatis med Spring Boot.

Som alltid finns den fullständiga koden som används i den här artikeln tillgänglig på GitHub.

Uthållighet botten

Jag tillkännagav just den nya Learn Spring- kursen, med fokus på grunderna i Spring 5 och Spring Boot 2:

>> KONTROLLERA KURSET