春に埋め込まれたデータベースの例

Spring組み込みデータベースの例

hsql database manager tool

このチュートリアルでは、HSQL、H2、Derbyなどの組み込みデータベースエンジンをSpringフレームワークで構成するためのいくつかの例を紹介します。

使用される技術:

  1. 春4.1.6。リリース

  2. jUnit 4.1.2

  3. メーベン3

テスト済みの組み込みデータベース:

  1. HSQLDB 2.3.2

  2. H2 1.4.187

  3. ダービー10.11.1.1

組み込みデータベースの概念は、開発段階で非常に役立ちます。軽量、高速、クイックスタートタイム、テスト容易性、構成の容易さを向上させるため、開発者はデータベースにデータソースを構成する方法ではなく、開発に集中できます。または、数行のコードをテストするだけの重いデータベースを開始するために時間を無駄にします。

P.S This embedded database feature has been available since Spring 3.

1. プロジェクトの依存関係

組み込みデータベース機能はspring-mvcに含まれています。 たとえば、HSQL組み込みデータベースを起動するには、spring-mvchsqldbの両方を含める必要があります。

pom.xml

    
        4.1.6.RELEASE
        2.3.2
        1.4.187
        10.11.1.1
    

    

        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        

        
        
            org.hsqldb
            hsqldb
            ${hsqldb.version}
        

        
        
            com.h2database
            h2
            ${dbh2.version}
        

        
        
            org.apache.derby
            derby
            ${derby.version}
        

    

2. Spring XMLの埋め込みデータベース

Spring XMLを使用して組み込みデータベースを作成し、テーブルを作成してデータを挿入するスクリプトを初期化する例。 Springは、idタグの値を使用してデータベース名を作成します。以下の例では、データベース名は「dataSource」になります。

2.1 HSQL example.

    
        
        
    

2.2 H2 example.

    
        
        
    

2.3 Derby example.

    
        
        
    

次の「JDBCドライバー接続」が作成されます。

  1. HSQL –jdbc:hsqldb:mem:dataSource

  2. H2 –jdbc:h2:mem:dataSource

  3. ダービー–jdbc:derby:memory:dataSource

3. Springコードの埋め込みデータベース

組み込みデータベースをプログラムで作成する例。 EmbeddedDatabaseBuilder.setName()を介してデータベース名が定義されていない場合、Springはデフォルトのデータベース名「testdb」を割り当てます。

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
//...

    @Bean
    public DataSource dataSource() {

        // no need shutdown, EmbeddedDatabaseFactoryBean will take care of this
        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        EmbeddedDatabase db = builder
            .setType(EmbeddedDatabaseType.HSQL) //.H2 or .DERBY
            .addScript("db/sql/create-db.sql")
            .addScript("db/sql/insert-data.sql")
            .build();
        return db;
    }
@ComponentScan({ "com.example" })
@Configuration
public class SpringRootConfig {

    @Autowired
    DataSource dataSource;

    @Bean
    public JdbcTemplate getJdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }

次の「JDBCドライバー接続」が作成されます。

  1. HSQL –jdbc:hsqldb:mem:testdb

  2. H2 –jdbc:h2:mem:testdb

  3. ダービー–jdbc:derby:memory:testdb

4. 単体テスト

組み込みデータベースを使用してDAOをテストする簡単な単体テストの例。

4.1 SQL scripts to create table and insert data.

create-db.sql

CREATE TABLE users (
  id         INTEGER PRIMARY KEY,
  name VARCHAR(30),
  email  VARCHAR(50)
);

insert-data.sql

INSERT INTO users VALUES (1, 'example', '[email protected]');
INSERT INTO users VALUES (2, 'alex', '[email protected]');
INSERT INTO users VALUES (3, 'joel', '[email protected]');

4.2 Unit Test a UserDao with H2 embedded database.

UserDaoTest.java

package com.example.dao;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;

import com.example.model.User;

public class UserDaoTest {

    private EmbeddedDatabase db;
    UserDao userDao;

    @Before
    public void setUp() {
        //db = new EmbeddedDatabaseBuilder().addDefaultScripts().build();
        db = new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("db/sql/create-db.sql")
            .addScript("db/sql/insert-data.sql")
            .build();
    }

    @Test
    public void testFindByname() {
        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(db);
        UserDaoImpl userDao = new UserDaoImpl();
        userDao.setNamedParameterJdbcTemplate(template);

        User user = userDao.findByName("example");

        Assert.assertNotNull(user);
        Assert.assertEquals(1, user.getId().intValue());
        Assert.assertEquals("example", user.getName());
        Assert.assertEquals("[email protected]", user.getEmail());

    }

    @After
    public void tearDown() {
        db.shutdown();
    }

}

完了しました。

5. 埋め込みデータベースコンテンツを表示しますか?

組み込みデータベースにアクセスまたは表示するには、特定の「データベースマネージャツール」が、組み込みデータベースを起動した同じSpringコンテナまたはJVMで起動する必要があります。 さらに、埋め込みデータベースBeanの後に「データベースマネージャーツール」を起動する必要があります。これは、Springのログを観察してBeanのロードシーケンスを特定することで解決するのが最善です。

「HSQLデータベースマネージャー」は優れたツールであり、同じSpringコンテナー内で開始するだけです。

@PostConstruct
public void startDBManager() {

    //hsqldb
    //DatabaseManagerSwing.main(new String[] { "--url", "jdbc:hsqldb:mem:testdb", "--user", "sa", "--password", "" });

    //derby
    //DatabaseManagerSwing.main(new String[] { "--url", "jdbc:derby:memory:testdb", "--user", "", "--password", "" });

    //h2
    //DatabaseManagerSwing.main(new String[] { "--url", "jdbc:h2:mem:testdb", "--user", "sa", "--password", "" });

}

またはMethodInvokingBeanを使用したSpring XML


    
    
    
        
            --url
            jdbc:derby:memory:dataSource
            --user
            sa
            --password
            
        
    

図:HSQLデータベースマネージャーツール、組み込みデータベースにアクセスします。

hsql database manager tool

6. 接続プール

dbcp接続プールを接続する例。

    
    
        
        
    

    
        
    

    
        
        
        
        
    

ソースコードをダウンロード