MyBatis dengan Spring

Ketekunan atas

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS

1. Pengenalan

MyBatis adalah salah satu kerangka sumber terbuka yang paling umum digunakan untuk melaksanakan akses pangkalan data SQL dalam aplikasi Java.

Dalam tutorial ringkas ini, kami akan memaparkan cara mengintegrasikan MyBatis dengan Spring and Spring Boot.

Bagi mereka yang belum mengetahui kerangka ini, pastikan untuk membaca artikel kami mengenai bekerja dengan MyBatis.

2. Mendefinisikan Model

Mari mulakan dengan menentukan POJO ringkas yang akan kami gunakan sepanjang artikel kami:

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

Dan fail schema.sql SQL yang setara :

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

Seterusnya, mari buat fail data.sql , yang hanya memasukkan satu rekod ke dalam jadual artikel kami :

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

Kedua-dua fail SQL mesti dimasukkan ke dalam classpath.

3. Spring Config

Untuk mula menggunakan MyBatis, kita harus memasukkan dua kebergantungan utama - MyBatis dan MyBatis-Spring:

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

Selain itu, kami memerlukan pergantungan musim bunga asas:

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

Dalam contoh kami, kami akan menggunakan pangkalan data tertanam H2 untuk mempermudah persediaan dan kelas EmbeddedDatabaseBuilder dari modul spring-jdbc untuk konfigurasi:

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

3.1. Konfigurasi Berasaskan Anotasi

Spring mempermudah konfigurasi untuk MyBatis. Satu-satunya elemen yang diperlukan ialah javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory , dan sekurang-kurangnya satu mapper.

Pertama, mari buat kelas konfigurasi:

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

Kami juga menerapkan anotasi @MapperScan dari MyBatis-Spring yang mengimbas pakej yang ditentukan dan mengambil antara muka secara automatik menggunakan mana-mana anotasi mapper, seperti @Select atau @Delete.

Menggunakan @MapperScan juga memastikan bahawa setiap mapper yang disediakan secara automatik didaftarkan sebagai Bean dan kemudian dapat digunakan dengan anotasi @Autowired .

Kita sekarang boleh membuat antara muka ArticleMapper sederhana :

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

Dan akhirnya, uji persediaan kami:

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

Dalam contoh di atas, kami telah menggunakan MyBatis untuk mendapatkan satu-satunya rekod yang kami masukkan sebelumnya dalam fail data.sql kami .

3.2. Konfigurasi Berasaskan XML

Seperti yang dijelaskan sebelumnya, untuk menggunakan MyBatis dengan Spring, kami memerlukan Datasource , SqlSessionFactory , dan sekurang-kurangnya satu mapper.

Mari buat definisi kacang yang diperlukan dalam fail konfigurasi kacang.xml :

Dalam contoh ini, kami juga menggunakan skema XML khusus yang disediakan oleh spring-jdbc untuk mengkonfigurasi sumber data H2 kami.

Untuk menguji konfigurasi ini, kita dapat menggunakan semula kelas ujian yang dilaksanakan sebelumnya. Namun, kita harus menyesuaikan konfigurasi konteks, yang dapat kita lakukan dengan menerapkan anotasi:

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

4. Spring Boot

Spring Boot menyediakan mekanisme yang mempermudah konfigurasi MyBatis dengan Spring.

Pertama, mari tambah pergantungan mybatis-spring-boot-starter ke pom.xml kami :

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

Secara lalai, jika kita menggunakan ciri konfigurasi automatik, Spring Boot mengesan kebergantungan H2 dari classpath kami dan mengkonfigurasi Sumber Data dan SqlSessionFactory untuk kami. Di samping itu, ia juga melaksanakan kedua skema.sql dan data.sql pada permulaan.

Jika kita tidak menggunakan pangkalan data terbenam, kita boleh menggunakan konfigurasi melalui application.yml atau application.properties fail atau menentukan Sumber data kacang menunjuk ke pangkalan data kami.

Satu-satunya perkara yang kita telah meninggalkan untuk melakukan adalah untuk menentukan antara muka mapper, dengan cara yang sama seperti sebelum ini, dan anotasi ia dengan @Mapper anotasi dari MyBatis. Hasilnya, Spring Boot meneliti projek kami, mencari anotasi itu, dan mendaftarkan pemetaan kami sebagai kacang.

Selepas itu, kami dapat menguji konfigurasi kami menggunakan kelas ujian yang telah ditentukan sebelumnya dengan menerapkan anotasi dari spring-boot-starter-test :

@RunWith(SpringRunner.class) @SpringBootTest

5. Kesimpulan

Dalam artikel ini, kami meneroka pelbagai cara untuk mengkonfigurasi MyBatis dengan Spring.

Kami melihat contoh penggunaan konfigurasi berasaskan anotasi dan XML dan menunjukkan ciri konfigurasi automatik MyBatis dengan Spring Boot.

Seperti biasa, kod lengkap yang digunakan dalam artikel ini terdapat di GitHub.

Ketekunan bawah

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS