libro
www.tuyano.com
初心者のためのSpring Framework入門

Spring Data JPAの利用 (7/7)

作成:2015-07-25 08:40
更新:2015-07-25 08:40

■Bean設定クラスを利用する

Beanは、設定ファイルを使わず、クラスとして定義することもできましたね。先ほどdbbean.xmlでエンティティマネージャファクトリーを用意しましたが、クラスを使って同様のことを行ってみましょう。

ここでは、com.tuyaon.libro.dbパッケージに「SampleEntityConfig」というクラスを作成して、そこにBean作成のメソッドを用意しておくことにしましょう。下のリスト欄にサンプルを挙げておきました。このようにソースコードを書き換えて下さい。そして、Appクラスにある以下の文を修正しておきましょう。
ApplicationContext app = 
new ClassPathXmlApplicationContext("dbbean.xml");
    ↓
ApplicationContext app = 
new AnnotationConfigApplicationContext(SampleEntityConfig.class);

これで、SampleEntityConfigクラスを使ってBeanを作成できるようになります。dbbean.xmlは、不要になります。そればかりか、persistence.xmlも、application.propertiesも、実は不要になります(まぁ、application.propertiesを使わずクラス内に直接値を書いているからですが)。クラスを使ったほうが、ずいぶんとすっきりとエンティティマネージャを用意できることがわかりますね。では、ポイントを整理しておきましょう。


●DataSourceの作成
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.H2).build();
DataSourceは、EmbeddedDatabaseBuilderというクラスのインスタンスを作成し、そのsetTypeでデータベースの種類を設定して、それからbuildを呼び出せば作成されます。


●EntityManagerFactoryの作成
これは、ちょっと面倒な処理を行う必要があります。ここで行っている処理をざっと整理するとこんな感じになるでしょう。

HibernateJpaVendorAdapter インスタンスを作成する。
LocalContainerEntityManagerFactoryBean インスタンスを作成する。
setJpaVendorAdapterで、LocalContainerEntityManagerFactoryBeanにHibernateJpaVendorAdapterを設定する。
・他、setPackagesToScansetDataSourceといったメソッドでプロパティを設定する。
afterPropertiesSetを呼び出す。
getObjectEntityManagerインスタンスを取得する。

あれこれやることがあるので面倒な感じがしますが、Javaのコードだけで(XMLファイルなど)他に何も必要とせずにBean生成できることを考えると、Javaプログラマならこちらのやり方のほうが楽かもしれませんね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro.db;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

@Configuration
class SampleEntityConfig {

    @Bean
    public DataSource dataSource() {
        EmbeddedDatabaseBuilder builder = 
            new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.H2).build();
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        HibernateJpaVendorAdapter vendorAdapter = 
            new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);

        LocalContainerEntityManagerFactoryBean factory = 
            new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("com.tuyano.libro.db");
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();
        return factory.getObject();
    }

}
※関連コンテンツ

「初心者のためのSpring Framework入門」に戻る