Springs Embedded HSQLDB

HSQLDB - HyperSQL

Eine embedded Datenbank zu verwenden ist manchmal recht hilfreich. Sei es um schnell einen Prototypen zu bauen oder um Integration Tests laufen zu lassen.
Dank Spring ist die Verwendung einer embedded Datenbank schnell umgesetzt.

Neben einer HSQLDB Datenbank bietet Spring noch eine H2 und Derby Datenbank von Haus aus an.

Und so einfach gehts:
1) Dependencies hinzufügen
2) Spring Bean anlegen
3) HSQLDB verwenden

Dependencies

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>3.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.2.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>1.8.0.10</version>
    </dependency>
</dependencies>

Spring Bean anlegen

Als type können hier auch H2 und Derbie verwendet werden.

<jdbc:embedded-database id="dataSource" type="HSQL">
    <jdbc:script execution="INIT" location="classpath:sql-init.sql"/>
</jdbc:embedded-database>

Init Script anlegen

Ein kleines init Script das im resources Verzeichnis liegt legt eine Datenbank and und fügt genau einen Datensatz hinzu.

create table person (
  first_name VARCHAR(255),
  last_name VARCHAR(255),
  blog VARCHAR(255)
);

insert into person(first_name, last_name, blog) values('Simon', 'Michel', 'http://www.itblogging.de');

HSQLDB verwenden

In einer main Methode wird der Spring Application Context geladen und und eine Query abgesetzt.

ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
DataSource connect = context.getBean("dataSource", DataSource.class);

Map<String, Object> result = new JdbcTemplate(connect).queryForMap("SELECT * FROM person");
System.out.println(result.get("first_name"));
System.out.println(result.get("last_name"));
System.out.println(result.get("blog"));

Konsolenausgabe

Die Konsole printet wie zu erwarten den Vorname, Nachnamen sowie die Blog-URL aus.

Jul 28, 2014 10:40:37 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFORMATION: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@531d72ca: startup date [Mon Jul 28 22:40:37 CEST 2014]; root of context hierarchy
Jul 28, 2014 10:40:37 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFORMATION: Loading XML bean definitions from class path resource [context.xml]
Jul 28, 2014 10:40:37 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFORMATION: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@39fb3ab6: defining beans [dataSource]; root of factory hierarchy
Jul 28, 2014 10:40:37 PM org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory initDatabase
INFORMATION: Creating embedded database 'dataSource'
Jul 28, 2014 10:40:37 PM org.springframework.jdbc.datasource.init.ResourceDatabasePopulator executeSqlScript
INFORMATION: Executing SQL script from class path resource [sql-init.sql]
Jul 28, 2014 10:40:37 PM org.springframework.jdbc.datasource.init.ResourceDatabasePopulator executeSqlScript
INFORMATION: Done executing SQL script from class path resource [sql-init.sql] in 14 ms.
Simon
Michel
http://www.itblogging.de