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 ... ** H2DB ** scheint ein solches Problem zu lösen.
H2DB 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. Da es auch über eine Serverfunktion verfügt, ist es außerdem möglich, eine Verbindung von mehreren Apps aus herzustellen (überprüfen Sie beispielsweise den Inhalt der Tabelle von der Konsole aus, während Sie über die Web-App eine Verbindung zur Datenbank herstellen).
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.
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).
Versuchen Sie nach der Vorbereitung der DB-Zugriffsumgebung, die folgenden drei Arten von O / R-Mappern als Testversion zu verwenden.
Dieser Artikel verwendet die folgenden Versionen.
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 Plejaden All in One verlassen. Laden Sie die Java Full Edition mit jkd für Windows oder Mac von http://mergedoc.osdn.jp/ herunter.
Erstellen Sie ein Spring Boot-Projekt unter https://start.spring.io/. Fügen Sie zu diesem Zeitpunkt der Spring Boot-Abhängigkeit Folgendes hinzu.
Entpacken Sie die heruntergeladene Datei an einen geeigneten Ort (z. B. unter dem Arbeitsbereich, wenn Sie Eclipse verwenden). sample-dbaccess-h2 ├─ .gitignore ├─ .mvn ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml └─ src
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-h2 ├─ .gitignore ├─ .mvn ├─ dbflute-intro.jar ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml └─ src
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.
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.
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. !!
Das Projekt enthält weitere Dateien. sample-dbaccess ├─ .gitignore ├─ .mvn ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess_h2 ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml └─ 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.
Geben Sie die DDL wie die Tabellenerstellungsanweisung in replace-schema.sql in den zuvor erstellten projektspezifischen DBFlute-Ordner "dbflute_sample_dbaccess_h2" ein.
dbflute_sample_dbaccess_h2/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)
);
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_h2/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_h2/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
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.
Alternativ können Sie die Datei manage.bat ausführen. Beachten Sie, dass der Java-Pfad vorhanden ist.
cd dbflute_sample_dbaccess_h2
manage.bat 0
Die Datendatei für h2 wurde direkt unter dem Projekt vergrößert. Der hier erstellte Dateiname (\ * .mv.db) wird durch die Verbindungs-URL angegeben, die bei der Ersteinrichtung von DBFlute Intro eingegeben wurde. sample-dbaccess-h2 ├─ .gitignore ├─ .mvn ├─ _h2 ├─ h2data.mv.db ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess_h2 ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml └─ src
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 4. DBFlute Engine Initial Setup eingegebenen Paket ausgegeben.
Fügen Sie Einstellungen hinzu, um den O / R-Mapper für Spring zu verwenden.
Bearbeiten Sie zuerst 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.2.0</version>
</dependency>
</dependencies>
src/main/resources/application.yml
#Allgemeine DB-Verbindungsinformationen
spring:
datasource:
url: jdbc:h2:file:./_h2/h2data
username: sa
driverClassName: org.h2.Driver
#Einstellungen für My Batis. lower_Ordnen Sie den Namen der Fallspalte der Eigenschaft camelCase zu
mybatis:
configuration:
mapUnderscoreToCamelCase: true
Die Verbindungszeichenfolge für h2 lautet "h2: Datei: 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.
Wenn Sie in der Dateipfadeinstellung von h2 "url: jdbc: h2: file: _h2 / h2data" anstelle von "url: jdbc: h2: file: ./_h2 / h2data" festlegen, tritt zur Laufzeit der folgende Fehler auf.
Datenbank-URL mit relativem Dateipfad aus dem impliziten aktuellen Verzeichnis("jdbc:h2:file:_h2/h2data")Es ist nicht erlaubt, in anzugeben. Absoluter oder relativer Pfad stattdessen( ~/name, ./name)Oder geben Sie baseDir an.
A file path that is implicitly relative to the current working directory is not allowed in the database URL "jdbc:h2:file:_h2/h2data". Use an absolute path, ~/name, ./name, or the baseDir setting instead. [90011-199]
Wenn Sie einen relativen Pfad verwenden, müssen Sie den Pfad anscheinend explizit schreiben, beginnend mit dem aktuellen .
.
Wählen Sie ein Projekt aus und versuchen Sie "Maven> Projekt aktualisieren".
Fügen Sie die folgende Datei hinzu und starten Sie Spring einfach über die Befehlszeile.
SampleDbaccessH2Application.java
@SpringBootApplication
public class SampleDbaccessH2DBFluteApplication {
@Autowired
EmployeeBhv employeeBhv;
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessH2DBFluteApplication.class, args)) {
SampleDbaccessH2DBFluteApplication app = ctx.getBean(SampleDbaccessH2DBFluteApplication.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");
}
}
SampleDbaccessH2MyBatisApplication.java
@SpringBootApplication
public class SampleDbaccessH2MyBatisApplication {
@Autowired
EmployeeMapper employeeMapper;
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessH2MyBatisApplication.class, args)) {
SampleDbaccessH2MyBatisApplication app = ctx.getBean(SampleDbaccessH2MyBatisApplication.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
}
SampleDbaccessH2JDBCApplication.java
@SpringBootApplication
public class SampleDbaccessH2JDBCApplication {
@Autowired
JdbcTemplate jdbcTemplate;
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessH2JDBCApplication.class, args)) {
SampleDbaccessH2JDBCApplication app = ctx.getBean(SampleDbaccessH2JDBCApplication.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);
}
}
Immerhin fand ich den durch Kopieren und Einfügen erstellten Artikel einfach. Wenn Sie den Quellcode schreiben, müssen Sie kopieren und einfügen und auf DRY ...
Wenn sich eine Tabelle hinzufügt, ä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. Darüber hinaus verfügt DBFlute über 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](https: //www.slideshare). .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.
Wenn Sie von mehreren Anwendungen gleichzeitig auf die Datenbank zugreifen möchten, ist es aufgrund von Einschränkungen nicht möglich, eine Verbindung mit file: ...
herzustellen.
Mehrfacher gleichzeitiger Zugriff kann nicht nur in einer Produktionsumgebung, sondern auch in einer lokalen Entwicklungsumgebung erfolgen.
Zum Beispiel, wenn Sie das Schema mit DBFlute aktualisieren möchten, während die Webanwendung ausgeführt wird.
Dazu müssen Sie die Serverfunktion verwenden.
Das Verfahren zum Starten des Servers wird nachstehend kurz beschrieben.
Laden Sie alle Plattformen von [Honke Site] herunter (https://www.h2database.com/html/main.html).
Entpacken Sie die heruntergeladene Zip-Datei und verschieben Sie die erforderlichen Dateien in Ihr Projekt. Da nur die Laufzeit benötigt wird, verschieben Sie die folgenden Dateien von unter bin in das Verzeichnis für h2.
Die Struktur des Projekts ist wie folgt.
sample-dbaccess-h2 ├─ .gitignore ├─.mvn ├─ _h2 ├─ h2data.mv.db ├─ h2data.trace.db ├─ h2.bat ├─ h2-1.4.199.jar ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess_h2 ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml └─ src
CD im selben Verzeichnis wie das Startskript, das Sie oben verschoben haben, und führen Sie das Startskript aus. Beachten Sie, dass der Java-Pfad dem Ausführen von DBFlute Intro entsprechen muss. Der Browser wird gestartet und der Bildschirm wechselt zum Anmeldebildschirm der h2-Konsole.
Es ist nicht erforderlich, sich bei der Konsole anzumelden, aber hier werden wir versuchen, die von der Konsole eingegebenen Daten zu überprüfen.
Geben Sie die folgenden Informationen ein, um sich bei der Konsole anzumelden.
Wenn Sie sich anmelden, können Sie bestätigen, dass die Tabelle erstellt und Daten eingegeben wurden.
Ändern Sie die Verbindungszeichenfolge wie folgt:
url: jdbc:h2:tcp://localhost/./h2data
src/main/resources/application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/./h2data
#Unterlassung
dbflute_sample_dbaccess_h2/dfprop/databaseInfoMap.dfprop
#Unterlassung
; url: jdbc:h2:tcp://localhost/./h2data
#Unterlassung
Aus dem gleichen Grund, der bereits erwähnt wurde, können Sie "url: jdbc: h2: tcp: // localhost / h2data" nicht ausführen. Muss explizit der relative Pfad ". / H2data" anstelle von "h2data" sein.
Obwohl es nicht überprüft wurde, scheint es möglich zu sein, die Einstellungen (Port usw.) beim Starten des Servers festzulegen. http://www.h2database.com/html/tutorial.html#console_settings
Die Datei (im obigen Beispiel h2data.mv.db) ist nicht vollständig. Als ich den Server beim ersten Zugriff auf H2 startete und Schema aus DBFlute ersetzen ausführte, trat ein Fehler auf.
Database "/path/to/h2/h2data" not found, and IFEXISTS=true, so we cant auto-create it [90146-197]
Ich habe die Fehlermeldung erhalten, dass wenn ich der Verbindungsoption "IFEXISTS = true" hinzufüge, diese nicht automatisch erstellt werden kann. Daher habe ich versucht, "IFEXISTS = false" festzulegen, aber es hat nicht funktioniert.
Das erste Mal vermeide ich es vorerst mit der folgenden Methode.
file:
anstelle von tcp:
.
--Initialisieren von der H2 Management ConsoleRecommended Posts