[JAVA] Erstellen und verteilen Sie DB mit Apache Derby + DBFlute Intro

Einführung

Wenn Sie versuchen, eine Anwendung zu erstellen, die eine Verbindung zu einer Datenbank herstellt, ist dies im Hinblick auf die Erstellung der Umgebung häufig problematisch. Selbst wenn Sie den O / R-Mapper eine Weile ausprobieren, können Sie den DB-Server lokal installieren, eine Tabelle erstellen und Daten eingeben. In letzter Zeit scheint es möglich zu sein, eine Umgebung mithilfe von Containertechnologie wie Docker einfach zu erstellen. Wenn Sie jedoch Beispielanwendungen für Bildungszwecke usw. verteilen möchten, erstellen Sie die Umgebung so einfach wie möglich und führen Sie sie so schnell wie möglich aus. Die Schwelle wird etwas höher sein.

Wenn möglich, möchte ich eine Umgebung, die einfach in einer kleinen Kapazität zu verteilen ist und sofort ausgeführt werden kann ... ** Apache Derby ** scheint ein solches Problem zu lösen.

Was ist Apache Derby?

Apache Derby ist eine leichte RDB, die vollständig aus Java besteht. Es kann problemlos nur mit Dateizugriff oder Speicherzugriff ausgeführt werden und eignet sich sehr gut für Schulungen und die Verteilung von Beispielanwendungen.

Was ist DBFlute?

Es ist ein Tool zur Unterstützung der RDB-Entwicklung und hat die folgenden zwei Funktionen.

Dieser Artikel befasst sich hauptsächlich mit dem zweiten Tool zur Unterstützung der DB-Verwaltung. Auf diese Weise können Sie eine Tabelle erstellen und Daten in einem Stapel eingeben. Außerdem werde ich einen kleinen Beispielcode als O / R-Mapper schreiben.

Was ist DBFlute Intro?

DBFlute hat verschiedene Funktionen und es gibt eine spezielle Engine, um sie auszuführen. Wenn Sie DBFlute zum ersten Mal verwenden, müssen Sie daher die Engine herunterladen und die Umgebung festlegen. Es ist jedoch ein Tool, mit dem Sie eine solche Umgebung einfach vorbereiten können. Es wird in einem ausführbaren JAR-Format verteilt und kann sofort in jeder Java-Umgebung ausgeführt werden (https://github.com/dbflute/dbflute-intro/releases).

O / R-Mapper zum Ausprobieren

Versuchen Sie nach der Vorbereitung der DB-Zugriffsumgebung, die folgenden drei Arten von O / R-Mappern als Testversion zu verwenden.

Über die Version

Dieser Artikel verwendet die folgenden Versionen.

Über den Quellcode dieses Artikels

Von hier Sie können es herunterladen. Es kann sofort ausgeführt werden, indem es in Eclipse usw. importiert wird, wobei eine DB-Verbindung möglich ist.

Verfahren

0. Eclipse herunterladen

Da es eine große Sache ist, werde ich zunächst die Codierungsumgebung und die Ausführungsumgebung vorbereiten. Es muss nicht Eclipse sein, aber um Ihnen Ärger zu ersparen, werde ich mich hier auf Pleiades All in One verlassen. Laden Sie die Java Full Edition mit jkd für Windows oder Mac von http://mergedoc.osdn.jp/ herunter.

1. Apache Derby jar herunterladen

Holen Sie sich Dateien der Serie 10.14 aus dem Maven Repository. image.png

2. Erstellen Sie ein Projekt aus Spring Initializer

Erstellen Sie ein Spring Boot-Projekt unter https://start.spring.io/. Fügen Sie zu diesem Zeitpunkt der Spring Boot-Abhängigkeit Folgendes hinzu.

image.png

Entpacken Sie die heruntergeladene Datei an einen geeigneten Ort (z. B. unter dem Arbeitsbereich, wenn Sie Eclipse verwenden). sample-dbaccess ├─ .gitignore ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src

3. DBFlute Intro Download, Bereitstellung

Holen Sie sich die JAR-Datei von Github. https://github.com/dbflute/dbflute-intro/releases

Platzieren Sie die heruntergeladene Datei direkt unter dem Spring-Projekt, das Sie zuvor entpackt haben. sample-dbaccess ├─ .gitignore ├─ dbflute-intro.jar ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src

4. Führen Sie das DBFlute-Intro aus

Führen Sie die Datei dbflute-intro.jar aus. Wenn der Java-Pfad später nicht übergeben wird, übergeben Sie ihn.

set PATH=%PATH%;C:\path\to\eclipse_java\11\bin
java -jar dbflute-intro.jar

Bei der Ausführung wird ein lokaler Server intern gestartet und im Browser geöffnet. image.png

5. Ersteinrichtung der DBFlute-Engine

Geben Sie die erforderlichen Informationen ein und führen Sie die Ersteinrichtung durch. Klicken Sie nach Abschluss der Eingabe auf dem Bildschirm auf die Schaltfläche "Erstellen", um sie auszuführen. image.png

Die folgenden Punkte sollten bei der Eingabe beachtet werden.

Da DBFlute als Beispiel für einen O / R-Mapper verwendet wird, klicken Sie auf der rechten Seite des Bildschirms auf "O / R-Mapper-Einstellungen", um die Eingabe vorzubereiten, und geben Sie Folgendes ein.

Wenn Sie auf die Schaltfläche "Erstellen" klicken und die Ausführung erfolgreich ist, wird der folgende Bildschirm angezeigt. setupdone_dbflute_intro.png

Das Projekt enthält weitere Dateien. sample-dbaccess ├─ .gitignore ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src

--mydbflute: DBFlute-Engine. Grundsätzlich bearbeiten Sie hier nicht. --dbflute _ * xxx *: Dieser Ordner enthält DBFlute-Einstellungen für jedes Projekt. "Xxx" ist der "Projektname", der bei der Ersteinrichtung eingegeben wurde.

6. Erstellen Sie DDL

Geben Sie die DDL wie die Anweisung create create in replace-schema.sql in den zuvor erstellten projektspezifischen DBFlute-Ordner "dbflute_ * xxx *" ein.

dbflute_sample_dbaccess/playsql/replace-schema.sql


create table DEPARTMENT (
	DEPARTMENT_ID int not null,
	DEPARTMENT_NAME varchar(100) not null,
	constraint PK_DEPARTMENT primary key(DEPARTMENT_ID),
	constraint FK_DEPARTMENT_1 FOREIGN KEY (DEPARTMENT_ID) references DEPARTMENT(DEPARTMENT_ID)
);

create table EMPLOYEE (
	EMPLOYEE_ID int not null,
	EMPLOYEE_NAME varchar(100) not null,
	DEPARTMENT_ID int not null,
	constraint PK_EMPLOYEE primary key(EMPLOYEE_ID),
	constraint FK_EMPLOYEE_1 FOREIGN KEY (DEPARTMENT_ID) references DEPARTMENT(DEPARTMENT_ID)
);

7. Datenerstellung zur Registrierung

Dieses Mal erstellen wir Registrierungsdaten im tsv-Format (Datenformat mit Tabulatoren als Trennzeichen). Bei der Registrierung von Daten gelten besondere Regeln, und Verzeichnis- und Dateinamen sollten besonders berücksichtigt werden. Weitere Informationen finden Sie unter "Datenregistrierung (TSV)".

dbflute_sample_dbaccess/playsql/data/ut/tsv/UTF-8/01-department.tsv


DEPARTMENT_ID	DEPARTMENT_NAME
1 Abteilung 1
2 Abteilung 2
3 Abteilung 3

dbflute_sample_dbaccess/playsql/data/ut/tsv/UTF-8/02-employee.tsv


EMPLOYEE_ID	EMPLOYEE_NAME	DEPARTMENT_ID
11 Mitarbeiter 11 1
12 Mitarbeiter 12 1
13 Mitarbeiter 13 1
21 Mitarbeiter 21 2
22 Mitarbeiter 22 2
23 Mitarbeiter 23 2
31 Mitarbeiter 31 3
32 Mitarbeiter 32 3
33 Mitarbeiter 33 3

8. Schemaerstellung und Dateneingabe

Wählen Sie im Bildschirm DBFlute Intro das erstellte Projekt aus und klicken Sie auf die Schaltfläche Schema ersetzen, um die Schemaerstellung und Dateneingabe auszuführen. image.png

Alternativ können Sie die Datei manage.bat ausführen. Beachten Sie, dass der Java-Pfad vorhanden ist.

cd dbflute_sample_dbaccess
manage.bat 0

Die Anzahl der Datendateien für Derby hat direkt im Rahmen des Projekts zugenommen. Der hier erstellte Verzeichnisname wird durch die Verbindungs-URL angegeben, die bei der Ersteinrichtung von DBFlute Intro eingegeben wurde. sample-dbaccess ├─ .gitignore ├─ _derbydata ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src

9. Automatische Quellcodegenerierung

Die automatische Quellcodegenerierung für DBFlute konnte nicht über den DBFlute-Intro-Bildschirm ausgeführt werden. Führen Sie sie daher über die Befehlszeile aus. Führen Sie manage.bat mit dem Argument "2: regenerate" aus (oder führen Sie es ohne Argumente aus und geben Sie es später ein). Weitere Informationen finden Sie unter Aufgaben verwalten.

cd dbflute_sample_dbaccess
manage.bat 2

Bei Erfolg wird der automatisch generierte Code unter dem in 5. DBFlute Engine Initial Setup eingegebenen Paket ausgegeben.

10. Fügen Sie die Federeinstellungen hinzu

Fügen Sie Einstellungen hinzu, um den O / R-Mapper für Spring zu verwenden.

Bearbeiten Sie zuerst die Datei pom.xml. Passen Sie die Java-Version an, um DBFlute-Abhängigkeiten hinzuzufügen.

pom.xml


<properties>
    <java.version>1.11</java.version>
</properties>
<!--Unterlassung-->
<dependencies>
    <!--Zu verschiedenen vorhandenen Abhängigkeiten hinzufügen-->
    <dependency>
        <groupId>org.dbflute</groupId>
        <artifactId>dbflute-runtime</artifactId>
        <version>1.1.9</version>
    </dependency>
</dependencies>

src/main/resources/application.yml


#Allgemeine DB-Verbindungsinformationen
spring:
  datasource:
    url: jdbc:derby:_derbydata
    username: APP
    driverClassName: org.apache.derby.jdbc.EmbeddedDriver

#Einstellungen für My Batis. lower_Ordnen Sie den Namen der Fallspalte der Eigenschaft camelCase zu
mybatis:
  configuration:
    mapUnderscoreToCamelCase: true

Hinweis 1. Informationen zum Benutzernamen

Die Verbindungszeichenfolge für Derby lautet "jdbc: Dateipfad". Geben Sie hier für den Dateipfad den relativen Pfad aus dem Basisverzeichnis an, wenn Sie Java ausführen (wenn Sie aus Eclipse direkt unter dem Projekt ausführen) oder den absoluten Pfad.

Hinweis 2. Wenn bei Eclipse ein Fehler auftritt

Wählen Sie ein Projekt aus und versuchen Sie "Maven> Projekt aktualisieren".

11. DBFlute-Testlauf

Fügen Sie die folgende Datei hinzu und starten Sie Spring einfach über die Befehlszeile.

SampleDbaccessDBFluteApplication.java


@SpringBootApplication
public class SampleDbaccessDBFluteApplication {

    @Autowired
    EmployeeBhv employeeBhv;

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessDBFluteApplication.class, args)) {
            SampleDbaccessDBFluteApplication app = ctx.getBean(SampleDbaccessDBFluteApplication.class);
            app.run(args);
        }
    }

    private void run(String... args) {
        System.out.println("Starten Sie die Verarbeitung");
        employeeBhv.selectList(cb -> {
            cb.setupSelect_Department();
            cb.query().setDepartmentId_Equal(2);
        }).forEach(employee -> {
            System.out.println(
                String.format(
                    "employeeName: %s, departmentName: %s",
                    employee.getEmployeeName(),
                    employee.getDepartment().get().getDepartmentName()));
        });
        //App-Verarbeitung
        System.out.println("Verarbeitung beenden");
    }
}

12. MyBatis-Testlauf

SampleDbaccessMyBatisApplication.java


@SpringBootApplication
public class SampleDbaccessMyBatisApplication {

    @Autowired
    EmployeeMapper employeeMapper;

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessMyBatisApplication.class, args)) {
            SampleDbaccessMyBatisApplication app = ctx.getBean(SampleDbaccessMyBatisApplication.class);
            app.run(args);
        }
    }

    private void run(String... args) {
        System.out.println("Starten Sie die Verarbeitung");
        employeeMapper.findEmployeeList(2).forEach(employee -> {
            if (employee != null) {
                System.out.println(
                    String.format(
                        "employeeName: %s, departmentName: %s",
                        employee.getEmployeeName(),
                        employee.getDepartmentName()));
            } else {
                System.out.println("employee is null");
            }
        });
        //App-Verarbeitung
        System.out.println("Verarbeitung beenden");
    }
}

EmployeeMapper.java


@Mapper
public interface EmployeeMapper {
    @Select({ "select emp.EMPLOYEE_NAME as EMPLOYEENAME, dept.DEPARTMENT_NAME",
        "from EMPLOYEE emp",
        "inner join DEPARTMENT dept on dept.DEPARTMENT_ID = emp.DEPARTMENT_ID",
        "where emp.DEPARTMENT_ID = #{departmentId}", })
    List<Employee> findEmployeeList(int departmentId);
}

Employee.java


public class Employee {
    private String employeeName;
    private String departmentName;
    
    // getter, setter
}

13. Spring JDBC-Testlauf

SampleDbaccessJDBCApplication.java


@SpringBootApplication
public class SampleDbaccessJDBCApplication {

    @Autowired
    JdbcTemplate jdbcTemplate;

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessJDBCApplication.class, args)) {
            SampleDbaccessJDBCApplication app = ctx.getBean(SampleDbaccessJDBCApplication.class);
            app.run(args);
        }
    }

    private void run(String... args) {
        System.out.println("Starten Sie die Verarbeitung");
        findEmployeeList(2).forEach(map -> {
            System.out.println(
                String.format(
                    "employeeName: %s, departmentName: %s",
                    map.get("EMPLOYEE_NAME"),
                    map.get("DEPARTMENT_NAME")));
        });
        System.out.println("Verarbeitung beenden");
    }

    private List<Map<String, Object>> findEmployeeList(int departmentId) {
        return jdbcTemplate.queryForList(String.join("", new String[] {
            "select emp.EMPLOYEE_NAME, dept.DEPARTMENT_NAME",
            " from EMPLOYEE emp",
            " inner join DEPARTMENT dept on dept.DEPARTMENT_ID = emp.DEPARTMENT_ID",
            " where emp.DEPARTMENT_ID = ?"
        }), departmentId);
    }
}

Bonus DB Flute als DB Management Support Tool

Wenn eine Änderung der Tabellenerweiterung vorgenommen wird, ändern Sie die Datei replace-schema.sql und die Registrierungsdaten, führen Sie manage.bat aus, die vorhandene Tabelle wird gelöscht und neu generiert, und eine Migration in der Entwicklungsumgebung ist möglich. DBFlute bietet auch hervorragende Funktionen als Migrationstool, z. B. als Tool zum Vergleichen von Schemadifferenzen (Referenz: "20160521 Hinter der vollständigen Erneuerung des umfangreichen Videoverteilungsdienstes mit Java 8 .net / SuguruAkiho / 20160521-jjug-cccunext) ". Auch wenn Sie es nicht als O / R-Mapper einführen können, sollten Sie es als DB-Management-Support-Tool einführen.

abschließend

Durch den Import in Eclipse usw. wird es in einer Form verteilt, die sofort ausgeführt werden kann. Die Gesamtmenge der Quellcode + Derby-Datenbank beträgt nur 287 KB (nach Komprimierung). Bitte probieren Sie das O / R-Mapper-Beispiel sofort aus und erleben Sie es.

Recommended Posts

Erstellen und verteilen Sie DB mit Apache Derby + DBFlute Intro
DB-Umgebungskonstruktion mit DBFlute Intro + H2-Datenbank