Agregue ORM a su proyecto en cuatro pasos

Digamos que su proyecto necesita urgentemente un ORM y desea implementarlo lo más rápido posible. En este artículo, quiero mostrarle cómo puede hacer esto en solo cuatro pasos usando un ejemplo de uso del proyecto Apache Cayenne de código abierto .





Para empezar, describiré brevemente el mecanismo de trabajo con esta biblioteca. La base de datos y el esquema del modelo se describen en un archivo xml que se puede generar mediante una aplicación GUI o mediante la consola. Luego, en base al archivo xml, se generan los objetos java, que son el mapeo correspondiente de tablas en la base de datos. El último paso es crear ServerRuntimeun objeto que encapsule toda la pila de Apache Cayenne.



Pasemos a un ejemplo. Lo que hay que hacer:



  • Crear esquema de base de datos
  • Importe el esquema al proyecto, es decir, obtenga archivos xml con la descripción del esquema
  • Crear modelo de objeto, es decir, generar clases java
  • Inicializar ServerRuntimepara acceder a la base de datos desde la aplicación


? 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 — , .



cdbimport: , . . , , , . .





, 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().



API sql ejbql API. .



Apache Cayenne:



List<CarBrand> carBrans = ObjectSelect.query(CarBrand.class).select(context);


Eso es todo para mi. Como puede ver en este ejemplo, en unos pocos pasos puede obtener un ORM de producción que esté completamente operativo. Espero que el artículo haya sido de ayuda. Puede encontrar un ejemplo completo aquí .




All Articles