1. 概要

このチュートリアルでは、HibernateでSpring Bootを使用する方法を学習します。

単純なSpring Bootアプリケーションを構築し、それをHibernateと統合するのがいかに簡単かを示します。

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

Spring Initializr を使用して、SpringBootアプリケーションをブートストラップします。 この例では、Hibernateを統合するために必要な構成と依存関係のみを使用し、 Web JPA、、およびH2の依存関係を追加します。 これらの依存関係については、次のセクションで説明します。

次に、プロジェクトを生成してIDEで開きます。 生成されたプロジェクト構造を確認し、必要な構成ファイルを特定できます。

プロジェクトの構造は次のようになります。

3. Mavenの依存関係

pom.xml を開くと、Mavenとしてspring-boot-starter-webspring-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コア{#Version}

HHH000206:hibernate.propertiesが見つかりません

HCANN000001:HibernateCommonsアノテーション{#Version}

HHH000400:方言の使用:org.hibernate.dialect.H2Dialect

これで、ローカルホスト 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という新しいテーブルが作成されます。

アプリケーションに初期データを追加するには、いくつかの挿入ステートメントを含む新しい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リポジトリを新しいrepositoryフォルダに追加します。

@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 BookServiceUnitTest {

    @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データベースを使用しました。

これらすべてのテクノロジーを使用したアプリケーションの完全な例を示しました。 次に、データベースでテーブル名を大文字に設定する方法について簡単なヒントを示しました。

いつものように、この記事で言及されているすべてのコードスニペットは、GitHubリポジトリにあります。