Digamos que seu projeto precise urgentemente de um ORM e você queira implementá-lo o mais rápido possível. Neste artigo, quero dizer como você pode fazer isso em apenas quatro etapas usando um exemplo de uso do projeto Apache Cayenne de software livre .

Para começar, descreverei brevemente o mecanismo de trabalho com esta biblioteca. O banco de dados e o esquema do modelo são descritos em um arquivo xml que pode ser gerado por meio de um aplicativo GUI ou do console. Então, com base no arquivo xml, são gerados objetos java, que são o mapeamento correspondente das tabelas no banco de dados. A última etapa é criar ServerRuntimeum objeto que encapsula toda a pilha do Apache Cayenne.
Então, vamos ver um exemplo. O que precisa ser feito:
- Criar esquema de banco de dados
- Importe o esquema para o projeto, ou seja, obtenha arquivos xml com a descrição do esquema
- Criar modelo de objeto, ou seja, gerar classes java
- Inicialize
ServerRuntimepara acessar o banco de dados do aplicativo
? 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);
Isso é tudo para mim. Como você pode ver neste exemplo, em algumas etapas você pode obter um ORM de produção que está totalmente operacional. Espero que o artigo tenha sido útil. Um exemplo completo pode ser encontrado aqui .