Spring eingebettete Datenbankbeispiele

Beispiele für eingebettete Spring-Datenbanken

hsql database manager tool

In diesem Tutorial zeigen wir Ihnen einige Beispiele zum Konfigurieren der eingebetteten Datenbank-Engines wie HSQL, H2 und Derby in Spring Framework.

Verwendete Technologien:

  1. Feder 4.1.6.FREIGABE

  2. jUnit 4.1.2

  3. Maven 3

Getestete eingebettete Datenbanken:

  1. HSQLDB 2.3.2

  2. H2 1.4.187

  3. Derby 10.11.1.1

Das Konzept der eingebetteten Datenbank ist während der Entwicklungsphase sehr hilfreich, da es leichtgewichtig, schnell und schnell zu starten ist, die Testbarkeit verbessert und die Konfiguration vereinfacht. Entwickler können sich mehr auf die Entwicklung konzentrieren, anstatt eine Datenquelle für die Datenbank zu konfigurieren. oder verschwenden Sie Zeit, um eine Schwergewichtsdatenbank zu starten und nur ein paar Codezeilen zu testen.

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

1. Projektabhängigkeit

Die eingebetteten Datenbankfunktionen sind inspring-mvc enthalten. Um beispielsweise eine eingebettete HSQL-Datenbank zu starten, müssen Sie sowohlspring-mvc als auchhsqldb einschließen.

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. Eingebettete Datenbank in Spring XML

Beispiel zum Erstellen einer eingebetteten Datenbank mit Spring XML und Initialisieren einiger Skripts zum Erstellen von Tabellen und Einfügen von Daten. Spring erstellt den Datenbanknamen unter Verwendung des Werts des Tagsid. In den folgenden Beispielen lautet der Datenbankname "dataSource".

2.1 HSQL example.

    
        
        
    

2.2 H2 example.

    
        
        
    

2.3 Derby example.

    
        
        
    

Die folgende "JDBC-Treiberverbindung" wird erstellt:

  1. HSQL -jdbc:hsqldb:mem:dataSource

  2. H2 -jdbc:h2:mem:dataSource

  3. DERBY -jdbc:derby:memory:dataSource

3. Eingebettete Datenbank In Spring-Code

Beispiele zum programmgesteuerten Erstellen einer eingebetteten Datenbank. Wenn überEmbeddedDatabaseBuilder.setName() kein Datenbankname definiert ist, weist Spring einen Standarddatenbanknamen "testdb" zu.

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);
    }

Die folgende "JDBC-Treiberverbindung" wird erstellt:

  1. HSQL -jdbc:hsqldb:mem:testdb

  2. H2 -jdbc:h2:mem:testdb

  3. DERBY -jdbc:derby:memory:testdb

4. Gerätetest

Ein einfaches Unit-Test-Beispiel zum Testen eines DAO mit eingebetteter Datenbank.

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();
    }

}

Erledigt.

5. Den Inhalt der eingebetteten Datenbank anzeigen?

Um auf die eingebettete Datenbank zugreifen oder diese anzeigen zu können, muss das jeweilige „Datenbankmanager-Tool“ mit demselben Spring-Container oder derselben JVM beginnen, mit der die eingebettete Datenbank gestartet wurde. Darüber hinaus muss das "Datenbankmanager-Tool" nach der eingebetteten Datenbank-Bean gestartet werden. Beheben Sie dies am besten, indem Sie das Spring-Protokoll beobachten, um die Ladesequenz der Beans zu ermitteln.

Der „HSQL-Datenbankmanager“ ist ein gutes Tool. Starten Sie einfach im selben Spring-Container.

@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", "" });

}

Oder Spring XML mitMethodInvokingBean


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

Abbildung: HSQL-Datenbankmanager-Tool, Zugriff auf die eingebettete Datenbank.

hsql database manager tool

6. Verbindungspool

Beispiel zum Verbinden eines DBCP-Verbindungspools.

    
    
        
        
    

    
        
    

    
        
        
        
        
    

Quellcode herunterladen