MyBatis with Spring

1. 前書き

MyBatisは、JavaアプリケーションでSQLデータベースアクセスを実装するために最も一般的に使用されるオープンソースフレームワークの1つです。
*このクイックチュートリアルでは、MyBatisをSpringおよびSpring Bootと統合する方法を紹介します。*
このフレームワークにまだ慣れていない人のために、https://www.baeldung.com/mybatis [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_ファイルを作成します。このファイルは、1つのレコードを_articles_テーブルに挿入するだけです。
INSERT INTO ARTICLES
VALUES (1, 'Working with MyBatis in Spring', 'Baeldung');
両方のSQLファイルをlink:/spring-classpath-file-access[classpath]に含める必要があります。

*3. Spring Config *

MyBatisの使用を開始するには、2つの主な依存関係(https://search.maven.org/search?q=g:org.mybatis%20a:mybatis[MyBatis]およびhttps://search.maven.org/を含める必要があります。 search?q = g:org.mybatis%20a:%20mybatis-spring [MyBatis-Spring]:
<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>
それとは別に、基本的なhttps://search.maven.org/search?q=g:org.springframework[Springの依存関係]が必要です。
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>
この例では、https://search.maven.org/search?q = g:com.h2database%20a:h2 [the H2 embedded database]を使用してセットアップを簡素化し、__https://の__EmbeddedDatabaseBuilder __classを使用します。 search.maven.org/search?q=g:org.springframework%20a:spring-jdbc[_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.1.8.RELEASE</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_や[email protected]_などのマッパーアノテーションを使用してインターフェースを自動的にピックアップします。
_ @ MapperScan_を使用すると、提供されたすべてのマッパーが自動的にlink:/spring-bean[Bean]として登録され、後でlink:/spring-で使用できるようになります。 autowire [_ @ Autowired_]アノテーション。
これで、simple _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_ fileに挿入した唯一のレコードを取得しました。

* 3.2。 XMLベースの構成*

前述のように、SpringでMyBatisを使用するには、_Datasource _、_ SqlSessionFactory_、および少なくとも1つのマッパーが必要です。
_beans.xml_ configurationファイルに必要な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の構成をさらに簡素化するメカニズムを提供します。
まず、https://search.maven.org/search?q = g:org.mybatis.spring.boot%20a:mybatis-spring-boot-starter [the] _https://search.maven.org/を追加しましょう。 search?q = g:org.mybatis.spring.boot%20a:mybatis-spring-boot-starter [mybatis-spring-boot-starter] _ https://search.maven.org/search?q=g:org .mybatis.spring.boot%20a:mybatis-spring-boot-starter [dependency] to our _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 __and __data.sql __onの両方の起動も実行します。
組み込みデータベースを使用しない場合は、_application.yml_または_application.properties_ファイルを介して設定を使用するか、データベースを指す_Datasource_ Beanを定義できます。
あとは、前と同じ方法でマッパーインターフェイスを定義し、MyBatisの_ @ Mapper_アノテーションを付けます。 その結果、Spring Bootはプロジェクトをスキャンしてその注釈を探し、マッパーをBeanとして登録します。
その後、以前に定義したテストクラスを使用して、_https://www.baeldung.com/spring-boot-testing [spring-boot-starter-test] _から注釈を適用することにより、構成をテストできます。
@RunWith(SpringRunner.class)
@SpringBootTest

5. 結論

この記事では、MyBatisをSpringで構成する複数の方法を検討しました。
注釈ベースのXML構成の使用例を見て、Spring Bootを使用したMyBatisの自動構成機能を示しました。
いつものように、この記事で使用される完全なコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-mybatis[GitHubで]から入手できます。