Exemples de bases de données intégrées Spring

Exemples de bases de données intégrées Spring

hsql database manager tool

Dans ce tutoriel, nous allons vous montrer quelques exemples pour configurer les moteurs de base de données embarqués tels que HSQL, H2 et Derby dans Spring Framework.

Technologies utilisées:

  1. Spring 4.1.6.RELEASE

  2. jUnit 4.1.2

  3. Maven 3

Bases de données embarquées testées:

  1. HSQLDB 2.3.2

  2. H2 1.4.187

  3. Derby 10.11.1.1

Le concept de base de données embarquée est très utile pendant la phase de développement, car ils sont légers, rapides, temps de démarrage rapide, améliorent la testabilité, la facilité de configuration, il permet au développeur de se concentrer davantage sur le développement plutôt que sur la façon de configurer une source de données dans la base de données, ou perdre du temps à démarrer une base de données lourde pour simplement tester quelques lignes de code.

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

1. Dépendance du projet

Les fonctionnalités de la base de données intégrée sont incluses dansspring-mvc. Par exemple, pour démarrer une base de données intégrée HSQL, vous devez inclure à la foisspring-mvc ethsqldb.

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. Base de données intégrée dans Spring XML

Exemple de création d'une base de données intégrée à l'aide de Spring XML et initialisation de certains scripts pour créer des tables et insérer des données. Spring créera le nom de la base de données en utilisant la valeur de la baliseid, dans les exemples ci-dessous, le nom de la base de données sera «dataSource».

2.1 HSQL example.

    
        
        
    

2.2 H2 example.

    
        
        
    

2.3 Derby example.

    
        
        
    

La «connexion du pilote JDBC» suivante sera créée:

  1. HSQL -jdbc:hsqldb:mem:dataSource

  2. H2 -jdbc:h2:mem:dataSource

  3. DERBY -jdbc:derby:memory:dataSource

3. Base de données intégrée dans le code Spring

Exemples pour créer une base de données intégrée par programme. Si aucun nom de base de données n'est défini viaEmbeddedDatabaseBuilder.setName(), Spring attribuera un nom de base de données par défaut «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);
    }

La «connexion du pilote JDBC» suivante sera créée:

  1. HSQL -jdbc:hsqldb:mem:testdb

  2. H2 -jdbc:h2:mem:testdb

  3. DERBY -jdbc:derby:memory:testdb

4. Test de l'unité

Un exemple de test unitaire simple pour tester un DAO avec une base de données intégrée.

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

}

Terminé.

5. Afficher le contenu de la base de données intégrée?

Pour accéder ou afficher la base de données intégrée, l '«outil de gestion de base de données» particulier doit démarrer avec le même conteneur Spring ou JVM, qui a démarré la base de données intégrée. En outre, l '«outil de gestion de base de données» doit démarrer après le bean de base de données intégré, il est préférable de résoudre ce problème en observant le journal de Spring pour identifier la séquence de chargement des beans.

Le «gestionnaire de base de données HSQL» est un bon outil, il suffit de démarrer dans le même conteneur 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", "" });

}

Ou Spring XML avecMethodInvokingBean


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

Figure: Outil de gestion de base de données HSQL, accédez à la base de données intégrée.

hsql database manager tool

6. Pool de connexion

Exemple de connexion d'un pool de connexions dbcp.

    
    
        
        
    

    
        
    

    
        
        
        
        
    

Télécharger le code source