hsqlデータベースマネージャツール、幅= 592、高さ= 362

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

使用される技術:

  1. Spring 4.1.6.RELEASE

  2. jUnit 4.1.2

  3. Maven 3

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

  1. HSQLDB 2.3.2

  2. H2 1.4.187

  3. ダービー10.11.1.1

組み込みデータベースのコンセプトは、開発フェーズでは軽量で高速で、開始時間が短く、テスト容易性が高く、構成が簡単で、開発者がデータベースにデータソースを構成する方法ではなく、開発に集中できるため、またはわずかなコード行をテストするために重量のあるデータベースを起動する時間を無駄にします。

__P.Sこの組み込みデータベース機能は、Spring 3以降に利用可能です。

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

組み込みデータベースの機能は

spring-mvc`に含まれています。たとえば、HSQL組み込みデータベースを起動するには、 `spring-mvc`と

hsqldb`の両方をインクルードする必要があります。

pom.xml

    <properties>
        <spring.version>4.1.6.RELEASE</spring.version>
        <hsqldb.version>2.3.2</hsqldb.version>
        <dbh2.version>1.4.187</dbh2.version>
        <derby.version>10.11.1.1</derby.version>
    </properties>

    <dependencies>

        <!-- Spring JDBC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- HyperSQL DB -->
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>${hsqldb.version}</version>
        </dependency>

        <!-- H2 DB -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${dbh2.version}</version>
        </dependency>

        <!-- Derby DB -->
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>${derby.version}</version>
        </dependency>

    </dependencies>

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

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

2.1 HSQLの例。

    <jdbc:embedded-database id="dataSource" type="HSQL">
        <jdbc:script location="classpath:db/sql/create-db.sql"/>
        <jdbc:script location="classpath:db/sql/insert-data.sql"/>
    </jdbc:embedded-database>

2.2 H2の例。

    <jdbc:embedded-database id="dataSource" type="H2">
        <jdbc:script location="classpath:db/sql/create-db.sql"/>
        <jdbc:script location="classpath:db/sql/insert-data.sql"/>
    </jdbc:embedded-database>

2.3 Derbyの例

    <jdbc:embedded-database id="dataSource" type="DERBY">
        <jdbc:script location="classpath:db/sql/create-db.sql"/>
        <jdbc:script location="classpath:db/sql/insert-data.sql"/>
    </jdbc:embedded-database>

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

  1. HSQL –

    jdbc:hsqldb:mem:dataSource

  2. H2 –

    jdbc:h2:mem:dataSource

  3. DERBY –

    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.mkyong" })
@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. DERBY –

    jdbc:derby:memory:testdb

ユニットテスト

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

4.1テーブルと挿入データを作成するためのSQLスクリプト。

create-db.sql

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

insert-data.sql

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

4.2ユニットH2組み込みデータベースを使って `UserDao`をテストします。

UserDaoTest.java

package com.mkyong.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.mkyong.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("mkyong");

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

    }

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

}

完了しました。

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

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

“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

<bean depends-on="dataSource"
    class="org.springframework.beans.factory.config.MethodInvokingBean">
    <property name="targetClass" value="org.hsqldb.util.DatabaseManagerSwing"/>
    <property name="targetMethod" value="main"/>
    <property name="arguments">
        <list>
            <value>--url</value>
            <value>jdbc:derby:memory:dataSource</value>
            <value>--user</value>
            <value>sa</value>
            <value>--password</value>
            <value></value>
        </list>
    </property>
</bean>


Figure:HSQLデータベースマネージャツール。組み込みデータベースにアクセスする.


hsqlデータベースマネージャツール、幅= 592、高さ= 362

6.接続プール

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

    <!-- jdbc:hsqldb:mem:dataSource -->
    <jdbc:embedded-database id="dataSource" type="HSQL">
        <jdbc:script location="classpath:db/sql/create-db.sql"/>
        <jdbc:script location="classpath:db/sql/insert-data.sql"/>
    </jdbc:embedded-database>

    <bean id="jdbcTemplate"
        class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" >
        <constructor-arg ref="dbcpDataSource"/>
    </bean>

    <bean id="dbcpDataSource" class="org.apache.commons.dbcp2.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:mem:dataSource"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>

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

参考文献

組み込みデータベースのサポート]。リンク://spring/spring-methodinvokingfactorybean-example/[Spring

MethodInvokingFactoryBeanの例]。リンク://spring/spring-view-content-of-hsqldb-embedded-database/[Spring

リンク://タグ/derby/[derby]リンク://タグ/h2/[h2]リンク://タグ/hsqldb/[hsqldb]

spring


spring
埋め込みデータベース