Angenommen, Ihr Projekt benötigt dringend ein ORM und Sie möchten es so schnell wie möglich implementieren. In diesem Artikel möchte ich Ihnen am Beispiel der Verwendung des Open-Source-Projekts Apache Cayenne zeigen, wie Sie dies in nur vier Schritten tun können .

Zunächst werde ich kurz den Mechanismus der Arbeit mit dieser Bibliothek beschreiben. Das Datenbank- und Modellschema wird in einer XML-Datei beschrieben, die über eine GUI-Anwendung oder über die Konsole generiert werden kann. Anschließend werden basierend auf der XML-Datei Java-Objekte generiert, bei denen es sich um die entsprechende Zuordnung von Tabellen in der Datenbank handelt. Der letzte Schritt besteht darin, ServerRuntimeein Objekt zu erstellen , das den gesamten Apache Cayenne-Stapel kapselt.
Kommen wir also zu einem Beispiel. Was getan werden muss:
- Datenbankschema erstellen
- Importieren Sie das Schema in das Projekt, dh rufen Sie XML-Dateien mit der Schemabeschreibung ab
- Objektmodell erstellen, d. H. Java-Klassen generieren
- Initialisieren Sie
ServerRuntime, um von der Anwendung aus auf die Datenbank zuzugreifen
? maven gradle , Java 1.8+ . maven, java 14 Apache Cayenne 4.2.M1. mysql. 4.1 .
.
, : , , .

CREATE SCHEMA IF NOT EXISTS cars_demo; USE cars_demo;
CREATE TABLE car_brand (ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(200) NULL, COUNTRY VARCHAR(200) NULL, PRIMARY KEY (ID)) ENGINE=InnoDB;
CREATE TABLE car_model (ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(200) NULL, CAR_BRAND_ID INT NULL, PRIMARY KEY (ID)) ENGINE=InnoDB;
CREATE TABLE feedback (CAR_MODEL_ID INT NULL, ID INT NOT NULL AUTO_INCREMENT, FEEDBACK VARCHAR(200) NULL, PRIMARY KEY (ID)) ENGINE=InnoDB;
ALTER TABLE car_model ADD FOREIGN KEY (CAR_BRAND_ID) REFERENCES car_brand (ID) ON DELETE CASCADE;
ALTER TABLE feedback ADD FOREIGN KEY (CAR_MODEL_ID) REFERENCES car_model (ID) ON DELETE CASCADE;
, .
. :
<plugin>
<groupId>org.apache.cayenne.plugins</groupId>
<artifactId>cayenne-maven-plugin</artifactId>
<version>${cayenne.version}</version>
<configuration>
<dataSource> <!--1-->
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://127.0.0.1:3306/cars_demo</url>
<username>root</username>
<password>root</password>
</dataSource>
<cayenneProject>${project.basedir}/src/main/resources/cayenne/cayenne-project.xml</cayenneProject> <!--2-->
<map>${project.basedir}/src/main/resources/cayenne/datamap.map.xml</map> <!--3-->
<dbImport> <!--4-->
<defaultPackage>cayenne.note.project.model</defaultPackage>
<catalog>cars_demo</catalog>
</dbImport>
</configuration>
<dependencies>
<dependency> <!--5-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</plugin>
- (1) DataSource,
- (2) , xml, Cayenne
- (3) , xml
- (4) ,
- (5) mysql-connector mysql
:
mvn cayenne:cdbimport
, (2) (3). , cayenne-project.xml , . datamap.map.xml — , .
, java , . , :
mvn cayenne:cgen
, , . , . auto . , . , auto. .
, Apache Cayenne.
ServerRuntime — Cayenne, .
ObjectContext — , .
ServerRuntime cayenneRuntime = ServerRuntime.builder()
.dataSource(DataSourceBuilder
.url("jdbc:mysql://127.0.0.1:3306/cars_demo")
.driver("com.mysql.cj.jdbc.Driver")
.userName("root") // Need to change to your username
.password("root") // Need to change to your password
.build())
.addConfig("cayenne/cayenne-project.xml")
.build();
ObjectContext context = cayenneRuntime.newContext();
:
CarBrand carBrand = context.newObject(CarBrand.class);
carBrand.setName("BMW");
carBrand.setCountry("Germany");
CarModel carModel = context.newObject(CarModel.class);
carModel.setName("i3");
carModel.setCarBrand(carBrand);
Feedback feedback = context.newObject(Feedback.class);
feedback.setFeedback("Like");
feedback.setCarModel(carModel);
context.commitChanges();
, ObjectContext, context.commitChanges().
Apache Cayenne:
List<CarBrand> carBrans = ObjectSelect.query(CarBrand.class).select(context);
Das ist alles für mich. Wie Sie diesem Beispiel entnehmen können, erhalten Sie in wenigen Schritten ein Produktions-ORM, das voll funktionsfähig ist. Ich hoffe der Artikel war hilfreich. Ein vollständiges Beispiel finden Sie hier .