1. 序章

MyBatisは、JavaアプリケーションでSQLデータベースアクセスを実装するために最も一般的に使用されるオープンソースフレームワークの1つです。

このクイックチュートリアルでは、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 ファイルを作成します。このファイルは、articlesテーブルに1つのレコードを挿入するだけです。

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

両方のSQLファイルがクラスパスに含まれている必要があります。

3. SpringConfig

MyBatisの使用を開始するには、MyBatisMyBatis-Springの2つの主要な依存関係を含める必要があります。

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>

それとは別に、基本的なSpring依存関係が必要です。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.8</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.3.8</version>
</dependency>

この例では、 H2組み込みデータベースを使用してセットアップを簡素化し、EmbeddedDatabaseBuilderクラスをspring-jdbcモジュールから構成します。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.199</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.8</version>
</dependency>

3.1. 注釈ベースの構成

SpringはMyBatisの設定を簡素化します。 必要な要素は、javax.sql.Datasource、org.apache.ibatis.session.SqlSessionFactory、および少なくとも1つのマッパーのみです。

まず、構成クラスを作成しましょう。

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

また、MyBatis-Springの @MapperScan アノテーションを適用しました。これは、定義されたパッケージをスキャンし、@Select@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ベースの構成

前述のように、SpringでMyBatisを使用するには、 Datasource SqlSessionFactory 、および少なくとも1つのマッパーが必要です。

beans.xml構成ファイルに必要なbean定義を作成しましょう。

<jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="schema.sql"/>
    <jdbc:script location="data.sql"/>
</jdbc:embedded-database>
    
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="articleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.baeldung.mybatis.ArticleMapper" />
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

この例では、 spring-jdbc によって提供されるカスタムXMLスキーマを使用して、H2データソースを構成しました。

この構成をテストするために、以前に実装されたテストクラスを再利用できます。 ただし、コンテキスト構成を調整する必要があります。これは、アノテーションを適用することで実行できます。

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

4. スプリングブーツ

Spring Bootは、Springを使用したMyBatisの構成をさらに簡素化するメカニズムを提供します。

まず、 mybatis- spring -boot-starter依存関係pom.xmlに追加しましょう。

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

デフォルトでは、自動構成機能を使用する場合、 Spring BootはクラスパスからH2依存関係を検出し、DatasourceとSqlSessionFactoryの両方を構成します。さらに、 schema.sql[起動時にX230X]およびdata.sql

組み込みデータベースを使用しない場合は、application.ymlまたはapplication.propertiesファイルを介して構成を使用するか、 Datasourcebeanポインティングを定義できます。私たちのデータベースに。

あとは、以前と同じようにマッパーインターフェイスを定義し、MyBatisの@Mapperアノテーションを付けるだけです。 その結果、Spring Bootはプロジェクトをスキャンしてそのアノテーションを探し、マッパーをBeanとして登録します。

その後、 spring-boot-starter-test からアノテーションを適用することにより、以前に定義されたテストクラスを使用して構成をテストできます。

@RunWith(SpringRunner.class)
@SpringBootTest

5. 結論

この記事では、SpringでMyBatisを構成する複数の方法について説明しました。

アノテーションベースのXML構成の使用例を見て、SpringBootを使用したMyBatisの自動構成機能を示しました。

いつものように、この記事で使用されている完全なコードは、GitHubから入手できます。