MyBatis dengan Spring

Ketekunan teratas

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

>> LIHAT KURSUSnya

1. Perkenalan

MyBatis adalah salah satu framework open-source yang paling umum digunakan untuk mengimplementasikan akses database SQL di aplikasi Java.

Dalam tutorial singkat ini, kami akan menyajikan bagaimana mengintegrasikan MyBatis dengan Spring dan Spring Boot.

Bagi mereka yang belum terbiasa dengan kerangka kerja ini, pastikan untuk membaca artikel kami tentang bekerja dengan MyBatis.

2. Mendefinisikan Model

Mari kita mulai dengan mendefinisikan POJO sederhana yang akan kita gunakan di seluruh artikel kita:

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

Dan file skema.sql SQL yang setara :

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

Selanjutnya, mari buat file data.sql , yang hanya memasukkan satu record ke dalam tabel artikel kita :

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

Kedua file SQL harus disertakan di classpath.

3. Konfigurasi Musim Semi

Untuk mulai menggunakan MyBatis, kita harus menyertakan dua dependensi utama - MyBatis dan MyBatis-Spring:

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

Selain itu, kita membutuhkan dependensi Spring dasar:

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

Dalam contoh kita, kita akan menggunakan database tertanam H2 untuk menyederhanakan pengaturan 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 Berbasis Anotasi

Spring menyederhanakan konfigurasi untuk MyBatis. Elemen yang diperlukan hanya javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory , dan setidaknya 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 memindai paket yang ditentukan dan secara otomatis mengambil antarmuka menggunakan salah satu anotasi mapper, seperti @Select atau @Delete.

Menggunakan @MapperScan juga memastikan bahwa setiap mapper yang disediakan secara otomatis terdaftar sebagai Bean dan nantinya dapat digunakan dengan anotasi @Autowired .

Sekarang kita dapat membuat antarmuka ArticleMapper sederhana :

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

Dan terakhir, uji penyiapan 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 mengambil satu-satunya catatan yang kami sisipkan sebelumnya di file data.sql kami .

3.2. Konfigurasi Berbasis XML

Seperti dijelaskan sebelumnya, untuk menggunakan MyBatis dengan Spring, kita membutuhkan Datasource , SqlSessionFactory , dan setidaknya satu mapper.

Mari buat definisi kacang yang diperlukan di file konfigurasi beans.xml :

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

Untuk menguji konfigurasi ini, kita dapat menggunakan kembali kelas pengujian yang diimplementasikan sebelumnya. Namun, kita harus menyesuaikan konfigurasi konteks, yang dapat kita lakukan dengan menerapkan anotasi:

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

4. Sepatu Musim Semi

Spring Boot menyediakan mekanisme yang lebih menyederhanakan konfigurasi MyBatis dengan Spring.

Pertama, mari tambahkan dependensi mybatis-spring-boot-starter ke pom.xml kita :

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

Secara default, jika kita menggunakan fitur konfigurasi otomatis, Spring Boot mendeteksi ketergantungan H2 dari classpath kita dan mengkonfigurasi Datasource dan SqlSessionFactory untuk kita. Selain itu, ini juga menjalankan schema.sql dan data.sql saat startup.

Jika kita tidak menggunakan database embedded, kita dapat menggunakan konfigurasi melalui application.yml atau application.properties file atau menentukan sumber data kacang menunjuk ke database kami.

Satu-satunya hal yang tersisa untuk dilakukan adalah untuk mendefinisikan antarmuka mapper, dengan cara yang sama seperti sebelumnya, dan keterangan itu dengan @Mapper penjelasan dari MyBatis. Hasilnya, Spring Boot memindai proyek kami, mencari anotasi tersebut, dan mendaftarkan pembuat peta kami sebagai kacang.

Setelah itu, kita dapat menguji konfigurasi kita menggunakan kelas uji yang telah ditentukan sebelumnya dengan menerapkan anotasi dari spring-boot-starter-test :

@RunWith(SpringRunner.class) @SpringBootTest

5. Kesimpulan

Pada artikel ini, kami membahas beberapa cara untuk mengkonfigurasi MyBatis dengan Spring.

Kami melihat contoh penggunaan berbasis anotasi dan konfigurasi XML dan menunjukkan fitur konfigurasi otomatis MyBatis dengan Spring Boot.

Seperti biasa, kode lengkap yang digunakan dalam artikel ini tersedia di GitHub.

Ketekunan bawah

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

>> LIHAT KURSUSnya