MyBatis med foråret

Udholdenhedstop

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Introduktion

MyBatis er en af ​​de mest anvendte open source-rammer til implementering af SQL-databaseadgang i Java-applikationer.

I denne hurtige vejledning præsenterer vi, hvordan du integrerer MyBatis med Spring og Spring Boot.

For dem der endnu ikke er bekendt med denne ramme, skal du sørge for at tjekke vores artikel om at arbejde med MyBatis.

2. Definition af modellen

Lad os starte med at definere simpel POJO, som vi bruger i hele vores artikel:

offentlig klasse artikel {privat Lang id; privat streng titel; privat strengforfatter; // constructor, standard getters and setters}

Og en tilsvarende SQL skema.sql fil:

Opret TABEL, HVIS DET IKKE FINDER `ARTIKLER` (` id` INTEGER PRIMÆR NØGLE, `titel` VARCHAR (100) NOT NULL,` author` VARCHAR (100) NOT NULL);

Lad os derefter oprette en data.sql fil, der simpelthen indsætter en post i vores artikler bord:

INDSÆT I ARTIKELVÆRDIER (1, 'Arbejde med MyBatis om foråret', 'Baeldung');

Begge SQL-filer skal inkluderes i klassestien.

3. Spring Config

For at begynde at bruge MyBatis skal vi medtage to hovedafhængigheder - MyBatis og MyBatis-Spring:

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

Bortset fra det har vi brug for grundlæggende forårsafhængigheder:

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

I vores eksempler bruger vi den indlejrede H2-database til at forenkle opsætningen og EmbeddedDatabaseBuilder klasse fra forår-jdbc modul til konfiguration:

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

3.1. Annotationsbaseret konfiguration

Spring forenkler konfigurationen for MyBatis. De eneste nødvendige elementer er javax.sql.Datasource, org.apache.ibatis.session.SqlSessionFactoryog mindst en kortlægger.

Lad os først oprette en konfigurationsklasse:

@Configuration @MapperScan ("com.baeldung.mybatis") offentlig klasse PersistenceConfig {@Bean public DataSource dataSource () {return new EmbeddedDatabaseBuilder () .setType (EmbeddedDatabaseType.H2) .addScript ("schema.sql") .addScript (" data.sql ") .build (); } @Bean public SqlSessionFactory sqlSessionFactory () kaster undtagelse {SqlSessionFactoryBean factoryBean = ny SqlSessionFactoryBean (); factoryBean.setDataSource (dataSource ()); returner factoryBean.getObject (); }}

Vi anvendte også en @MapperScan kommentar fra MyBatis-Spring, der scanner definerede pakker og automatisk opfanger grænseflader ved hjælp af en hvilken som helst kortlægningsnotater, f.eks. @Vælg eller @Slet.

Ved brug af @MapperScan sørger også for, at enhver leveret kortlægger automatisk registreres som en bønne og senere kan bruges med @Autowired kommentar.

Vi kan nu oprette en simpel ArticleMapper grænseflade:

offentlig grænseflade ArticleMapper {@Select ("SELECT * FROM ARTICLES WHERE id = # {id}") Article getArticle (@Param ("id") Long id); }

Og endelig, test vores opsætning:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (klasser = PersistenceConfig.class) offentlig klasse ArticleMapperIntegrationTest {@Autowired ArticleMapper articleMapper; @Test offentligt ugyldigt nårRecordsInDatabase_shouldReturnArticleWithGivenId () {Article article = articleMapper.getArticle (1L); hævder, at (artikel) .isNotNull (); assertThat (article.getId ()). er EqualTo (1L); assertThat (article.getAuthor ()). er EqualTo ("Baeldung"); assertThat (article.getTitle ()). isEqualTo ("Arbejde med MyBatis om foråret"); }}

I ovenstående eksempel har vi brugt MyBatis til at hente den eneste post, vi tidligere har indsat i vores data.sql fil.

3.2. XML-baseret konfiguration

Som tidligere beskrevet har vi brug for at bruge MyBatis med Spring Datakilde, SqlSessionFactoryog mindst en kortlægger.

Lad os oprette de krævede bønnedefinitioner i bønner.xml konfigurationsfil:

I dette eksempel brugte vi også det brugerdefinerede XML-skema leveret af forår-jdbc for at konfigurere vores H2-datakilde.

For at teste denne konfiguration kan vi genbruge den tidligere implementerede testklasse. Vi skal dog justere kontekstkonfigurationen, hvilket vi kan gøre ved at anvende kommentaren:

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

4. Fjederstøvle

Spring Boot giver mekanismer, der forenkler konfigurationen af ​​MyBatis med Spring endnu mere.

Lad os først tilføje mybatis-spring-boot-starter afhængighed af vores pom.xml:

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

Som standard, hvis vi bruger en automatisk konfigurationsfunktion, Spring Boot registrerer H2-afhængighed fra vores klassesti og konfigurerer begge Datakilde og SqlSessionFactory for os. Derudover udfører den også begge dele skema.sql og data.sql ved opstart.

Hvis vi ikke bruger en integreret database, kan vi bruge konfiguration via en ansøgning.yml eller application.properties fil eller definer en Datakilde bønne peger på vores database.

Det eneste, vi har tilbage, er at definere en kortlæggergrænseflade på samme måde som før og kommentere den med @Mapper kommentar fra MyBatis. Som et resultat scanner Spring Boot vores projekt på udkig efter denne kommentar og registrerer vores kortlæggere som bønner.

Derefter kan vi teste vores konfiguration ved hjælp af den tidligere definerede testklasse ved at anvende kommentarer fra spring-boot-starter-test:

@RunWith (SpringRunner.class) @SpringBootTest

5. Konklusion

I denne artikel undersøgte vi flere måder at konfigurere MyBatis med Spring.

Vi kiggede på eksempler på brug af annoteringsbaseret og XML-konfiguration og viste de automatiske konfigurationsfunktioner i MyBatis med Spring Boot.

Som altid er den komplette kode, der bruges i denne artikel, tilgængelig på GitHub.

Persistens bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN