Spring Boot, JPA und H2-Datenbank integrieren

View more Tutorials:

1- Das Zweck des Artikel

H2 ist eine Open source, kompakte relationale Datenbank (Relational database), die in Sprache  Java geschrieben wird. Der Installler  H2 hat die sehr wenige Kapazität, ca.  8MB.
Eine der interessanten Eigenschaften vom  H2 ist, dass Sie können eine Datenbank in Memory Database erstellen statt dessen wird sie in der Festplatte vom PC gespeichert.  Das macht die Geschwindigkeit vom Abfragen und der Datenmanipulation sehr schnell. Wenn Sie aber die Eigenschaft  "In Memory Database" wählen, existieren die Daten nur wenn die Applikation läuft. Wenn die Applikation geschlossen wird (shut down), werden die Daten aus dem Memory gelöscht.
H2 bietet Sie ein Management Tool mit dem Name von  H2 Console an und Sie arbeitet mit ihm durch den Browser
Im Artikel werde ich Sie bei der Erstellung eines Projekt  Spring Boot um mit der Datenbank  H2 (In Memory Database) zu integrieren, und bei der Konfiguration um das Management Tool  H2 Console zu verwenden anleiten
Es gibt nicht viele Unterschieden wenn Sie in die im PC installierten Datenbank  H2 verbinden möchten (in dem Anhang am Ende des Artikel mehr sehen).

2- Das Projekt Spring Boot erstellen

Auf  Eclipse erstellen Sie das Projekt  Spring Boot:
OK, Das Projekt wurde erstellt.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>SpringBootJpaH2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringBootJpaH2</name>
    <description>Spring Boot + Jpa + H2</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
SpringBootJpaH2Application.java
package org.o7planning.springbooth2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootJpaH2Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJpaH2Application.class, args);
    }
    
}

3- Entity Class, DAO, DataInit, Controller

Person.java
package org.o7planning.springbooth2.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "PERSON")
public class Person {

    @Id
    @GeneratedValue
    @Column(name = "Id", nullable = false)
    private Long id;

    @Column(name = "Full_Name", length = 64, nullable = false)
    private String fullName;

    @Temporal(TemporalType.DATE)
    @Column(name = "Date_Of_Birth", nullable = false)
    private Date dateOfBirth;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public Date getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

}
PersonDAO ist eine Interface, die aus  CrudRepository<Person, Long> verweitert wird (extend). Spring Data JPA wird bei dem Start von Applikation Ihnen eine Klasse zur Klasse-Implementiertung erstellen.
Mehr sehen
PersonDAO.java
package org.o7planning.springbooth2.dao;

import java.util.Date;
import java.util.List;

import org.o7planning.springbooth2.entity.Person;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PersonDAO extends CrudRepository<Person, Long> {

    public List<Person> findByFullNameLike(String name);

    public List<Person> findByDateOfBirthGreaterThan(Date date);

}
Die Klasse D ataInit implementiert die Interface  ApplicationRunner.  Sie wird beim Start der Applikation automatisch laufen. In dieser Klasse werden wir ein Rekord in die Tabelle PERSON einfügen.
DataInit.java
package org.o7planning.springbooth2.init;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.o7planning.springbooth2.dao.PersonDAO;
import org.o7planning.springbooth2.entity.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class DataInit implements ApplicationRunner {

    private PersonDAO personDAO;

    private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    @Autowired
    public DataInit(PersonDAO personDAO) {
        this.personDAO = personDAO;
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        long count = personDAO.count();

        if (count == 0) {
            Person p1 = new Person();

            p1.setFullName("John");

            Date d1 = df.parse("1980-12-20");
            p1.setDateOfBirth(d1);
            //
            Person p2 = new Person();

            p2.setFullName("Smith");
            Date d2 = df.parse("1985-11-11");
            p2.setDateOfBirth(d2);

            personDAO.save(p1);
            personDAO.save(p2);
        }

    }
    
}
MainController.java
package org.o7planning.springbooth2.controller;

import org.o7planning.springbooth2.dao.PersonDAO;
import org.o7planning.springbooth2.entity.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {

    @Autowired
    private PersonDAO personDAO;

    @ResponseBody
    @RequestMapping("/")
    public String index() {
        Iterable<Person> all = personDAO.findAll();

        StringBuilder sb = new StringBuilder();

        all.forEach(p -> sb.append(p.getFullName() + "<br>"));

        return sb.toString();
    }

}

4- Spring Boot & H2 konfigurieren

In diesem Beispiel werde ich  Spring Boot konfigurieren um H 2 wie eine Datenbank in Memory Database zu verwenden. Das heißt, dass wir die Installation der Datenbank  H2 brauchen. Es wird in die PC- Speicherung erstellt und gespeichert.
In einer anderen Situation wenn Sie eine Datenbank  H2 auf Ihrem Computer installiert haben und die  Spring Boot mit der Datenbank interaktieren möchten, können Sie den Anhang am Ende des Artikel lernen können .
application.properties
# To See H2 Console in Browser:
# http://localhost:8080/h2-console
# Enabling H2 Console
spring.h2.console.enabled=true

# ===============================
# DB
# ===============================

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# ===============================
# JPA / HIBERNATE
# ===============================

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

spring.h2.console.enabled=true

Die Konfiguration sagt Spring, das Management Tool von der Datenbank  H2 zu beginnen. Und Sie können das Tool auf dem Browser zugreifen:

spring.datasource.url=jdbc:h2:mem:testdb

Die Konfiguration sagt  Spring , dass Sie die Datenbank  H2 in Memory Database verwenden möchten

spring.jpa.hibernate.ddl-auto=update

Die Strukture sagt  Spring , die Struktur der Tabelle von der Klasse  Entity zu erstellen oder aktuallisieren. Deshalb wird die Tabelle  PERSON nach der Struktur der Klasse  Person automatisch erstellt.

5- Die Applikation laufen

Auf  Eclipse starten Sie Ihre Applikation
Jetzt wird  H2 Console auch mit der Applikation gestartet und Sie können das Management Tool zugreifen:
Die Tabelle  PERSON wurde nach der Struktur der Klasse  Person automatisch erstellt
Die Tabelle  PERSON abfragen (query):

6- Der Anhang H2

Falls Sie  H2 (Server) benutzen:
application.properties (H2 Server)
# To See H2 Console in Browser:
# http://localhost:8080/h2-console
# Enabling H2 Console
spring.h2.console.enabled=true

# ===============================
# DB
# ===============================

spring.datasource.url=jdbc:h2:tcp://localhost/~/testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# ===============================
# JPA / HIBERNATE
# ===============================

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

View more Tutorials: