Hibernateを使用したSpring Boot

1. 概要

この記事では、HibernateでSpring Bootを使用する方法について説明します。
シンプルなSpring Bootアプリケーションを構築し、Hibernateとの統合がいかに簡単かを確認します。

2. アプリケーションのブートストラップ

https://start.spring.io/[Spring Initializr]を使用して、Spring Bootアプリケーションをブートストラップします。 この例では、WEAは_Web_、_JPA、_と_H2_の依存関係を追加することは、Hibernateを統合するためにのみ必要な構成と依存関係を使用するでしょう。 これらの依存関係については、次のセクションで説明します。
プロジェクトを生成して、IDEで開きましょう。 生成されたプロジェクト構造を確認し、必要な構成ファイルを特定できます。
プロジェクト構造は次のようになります。
link:/uploads/spring_boot_hibernate_project-100x113.png%20100w []

3. Mavenの依存関係

_pom.xml_を開くと、maven依存関係として_spring-boot-starter-web_および_spring-boot-starter-test_があることがわかります。 名前が示すように、これらはSpring Bootで依存関係を開始しています。
JPAを取り込む依存関係を簡単に見てみましょう。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
この依存関係には、JPA API、JPA実装、JDBCおよびその他の必要なライブラリが含まれます。 デフォルトのJPA実装はHibernateであるため、この依存関係は実際にそれを取り込むのに十分です。
最後に、この例では_H2_を非常に軽量なデータベースとして使用します。
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
H2コンソールを使用して、DBが稼働中であることを確認し、データ入力用の使いやすいGUIも使用できます。 では、_application.properites_で有効にしてみましょう。
spring.h2.console.enabled=true
この例では、HibernateとH2を含めるように設定する必要があります。 Spring Bootアプリケーションを起動すると、ログで設定が成功したことを確認できます。
_HHH000412:Hibernate Core \ {#Version} _
_HHH000206:hibernate.propertiesが見つかりません_
_HCANN000001:Hibernate Commonsアノテーション\ {#Version} _
_HHH000400:方言の使用:org.hibernate.dialect.H2Dialect_
これで、localhost:_http:// localhost:8080 / h2-console / _のH2コンソールにアクセスできます。

4. エンティティの作成

H2が正常に機能していることを確認するには、まず新しい_models_フォルダーにJPAエンティティを作成します。
@Entity
public class Book {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    // standard constructors

    // standard getters and setters
}
これで、H2がテーブルを作成できる基本エンティティができました。 アプリケーションを再起動し、H2コンソールを確認すると、_Book_という新しいテーブルが作成されます。
アプリケーションに初期データを追加するには、いくつかのinsertステートメントを含む新しいSQLファイルを作成し、_resources_フォルダーに配置する必要があります。 * _import.sql_(Hibernateサポート)または_data.sql_(Spring JDBCサポート)ファイルを使用してデータをロードできます。*
サンプルデータは次のとおりです。
insert into book values(1, 'The Tartar Steppe');
insert into book values(2, 'Poem Strip');
insert into book values(3, 'Restless Nights: Selected Stories of Dino Buzzati');
繰り返しますが、Spring Bootアプリケーションを再起動し、H2コンソールを確認します。データは_Book_テーブルにあります。

5. リポジトリとサービスの作成

アプリケーションをテストするために、基本コンポーネントの作成を続けます。 最初に、JPAリポジトリを新しい_repositories_フォルダーに追加します。
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}
Springフレームワークの_JpaRepository_インターフェースを使用できます。これは、基本的な_CRUD_操作のデフォルト実装を提供します。
次に、_BookService_を新しい_services_フォルダーに追加します。
@Service
public class BookService {

    @Autowired
    private BookRepository bookRepository;

    public List<Book> list() {
        return bookRepository.findAll();
    }
}
アプリケーションをテストするには、作成したデータがサービスの_list()_メソッドから取得できることを確認する必要があります。
次の_SpringBootTest_を作成します。
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookServiceTest {

    @Autowired
    private BookService bookService;

    @Test
    public void whenApplicationStarts_thenHibernateCreatesInitialRecords() {
        List<Book> books = bookService.list();

        Assert.assertEquals(books.size(), 3);
    }
}
このテストを実行することにより、Hibernateが_Book_データを作成し、サービスによって正常に取得されることを確認できます。 HibernateはSpring Bootで実行されています。

6. 大文字のテーブル名

データベース内のテーブル名を大文字で書く必要がある場合があります。 すでに知っているように、*デフォルトでは、Hibernateはテーブル名を小文字で生成します*。
次のように、テーブル名を明示的に設定することもできます。
@Entity(name="BOOK")
public class Book {
    // members, standard getters and setters
}
ただし、それは機能しません。 動作するのは、_application.properties_でこのプロパティを設定することです。
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
その結果、大文字でテーブルが正常に作成されたことをデータベースで確認できます。

7. 結論

この記事では、HibernateをSpring Bootに統合するのがどれほど簡単かを見ました。 非常に軽量なメモリ内ソリューションとして、H2データベースを使用しました。
これらのすべてのテクノロジーを使用するアプリケーションの完全な例を示し、最終的には、データベース内で大文字でテーブル名を設定する方法に関する小さなヒントも示しました。
いつものように、この記事で言及されているすべてのコードスニペットはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-persistence[GitHubリポジトリ上]にあります。