أضف ORM إلى مشروعك في أربع خطوات

لنفترض أن مشروعك يحتاج بشكل عاجل إلى ORM وتريد تنفيذه في أسرع وقت ممكن. في هذه المقالة ، أريد أن أوضح لك كيفية القيام بذلك في أربع خطوات فقط باستخدام مثال على استخدام مشروع Apache Cayenne مفتوح المصدر .





بادئ ذي بدء ، سأصف بإيجاز آلية العمل مع هذه المكتبة. يتم وصف قاعدة البيانات ومخطط النموذج في ملف xml الذي يمكن إنشاؤه من خلال تطبيق GUI أو من خلال وحدة التحكم. بعد ذلك ، استنادًا إلى ملف xml ، يتم إنشاء كائنات جافا ، وهي الخرائط المقابلة للجداول في قاعدة البيانات. الخطوة الأخيرة هي إنشاء ServerRuntimeكائن يقوم بتغليف مكدس Apache Cayenne بأكمله.



لذلك دعنا ننتقل إلى مثال. ما يجب القيام به:



  • إنشاء مخطط قاعدة البيانات
  • قم باستيراد المخطط إلى المشروع ، أي الحصول على ملفات xml مع وصف المخطط
  • إنشاء نموذج كائن ، أي إنشاء فئات جافا
  • التهيئة ServerRuntimeللوصول إلى قاعدة البيانات من التطبيق


? 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);


هذا كل شيء بالنسبة لي. كما ترى من هذا المثال ، في بضع خطوات يمكنك الحصول على ORM للإنتاج يعمل بكامل طاقته. آمل أن تكون المقالة مفيدة. يمكن العثور على مثال كامل هنا .




All Articles