في عملية العمل على المشروع التالي ، تنازع الفريق على استخدام تنسيق XML أو SQL في Liquibase. من الطبيعي أن العديد من المقالات قد كتبت بالفعل عن ليكويباز ، لكن كما هو الحال دائمًا ، أود إضافة ملاحظاتي. ستقدم المقالة التعليمية الصغيرة حول إنشاء تطبيق بسيط مع قاعدة بيانات والنظر في الفرق في المعلومات الوصفية لهذه الأنواع.
Liquibase هي مكتبة مستقلة لقاعدة البيانات لتتبع تغييرات مخطط قاعدة البيانات وإدارتها وتطبيقها. لإجراء تغييرات على قاعدة البيانات ، يتم إنشاء ملف ترحيل (* changeset *) ، وهو مرتبط بالملف الرئيسي (* changeLog *) ، الذي يتحكم في الإصدارات ويدير جميع التغييرات. تستخدم تنسيقات
XML و
YAML و
JSON و
SQL لوصف بنية قاعدة البيانات وتغييراتها.
المفهوم الأساسي لترحيل قاعدة البيانات كما يلي:

يمكن العثور على مزيد من المعلومات حول Liquibase
هنا أو
هنا . آمل أن تكون الصورة الإجمالية واضحة ، لذلك دعنا ننتقل إلى إنشاء المشروع.
يستخدم مشروع الاختبار
- جافا 8
- التمهيد الربيع
- مخضرم
- H2
- حسنا fluibase نفسها
إنشاء المشروع والتبعيات
استخدام Spring-boot ليس مشروطًا هنا ، يمكنك القيام بملحق مكون إضافي من أجل البرامج النصية. لذلك دعونا نبدأ.
1. إنشاء مشروع مخضرم في IDE وإضافة التبعيات التالية إلى ملف بوم:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>3.6.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies>
2. في مجلد الموارد ، قم بإنشاء ملف application.yml وإضافة الأسطر التالية:
spring: liquibase: change-log: classpath:/db/changelog/db.changelog-master.yaml datasource: url: jdbc:h2:mem:test; platform: h2 username: sa password: driverClassName: org.h2.Driver h2: console: enabled: true
سطر Liquibase: سجل التغيير: classpath: /db/changelog/db.changelog-master.yaml - يخبرنا أين يوجد ملف البرنامج النصي liquibase.
3. في مجلد الموارد على طول مسار db.changelog-master ، قم بإنشاء الملفات التالية:
- xmlSchema.xml - تغيير البرنامج النصي بتنسيق xml
- sqlSchema.sql - البرنامج النصي للتغييرات في تنسيق sql
- data.xml - إضافة البيانات إلى الجدول
- db.changelog-master.yml - قائمة التغيير
4. إضافة البيانات إلى الملفات:
للاختبار ، تحتاج إلى إنشاء اثنين ر لا علاقة لها
الجداول والحد الأدنى لمجموعة البيانات.
في ملف sqlSchema.sql ، نضيف بناء جملة sql المعروف للجميع:
استخدام لغة الاستعلامات البنيوية كتغيير هو الدافع وراء البرمجة سهلة. في الملفات ، يفهم الجميع لغة الاستعلامات البنيوية المعتادة.
يستخدم التعليق لفصل مجموعة التغييرات:
--changeset TestUsers_sql: 1 مع رقم التغيير واسم العائلة
(يمكن العثور على المعلمات
هنا .)
في ملف xmlSchema.sql ، أضف DSL الذي يوفره قاعدة بيانات السائل: <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <changeSet id="Create table test_xml_table" author="TestUsers_xml"> <createTable tableName="test_xml_table"> <column name="name" type="character varying"> <constraints primaryKey="true" nullable="false"/> </column> <column name="description" type="character varying"/> </createTable> </changeSet> <changeSet id="Create table test_xml_table_2" author="TestUsers_xml"> <createTable tableName="test_xml_table_2"> <column name="name" type="character varying"> <constraints primaryKey="true" nullable="false"/> </column> <column name="description" type="character varying"/> </createTable> </changeSet> </databaseChangeLog>
هذا التنسيق لوصف إنشاء الجداول عالمي لقواعد البيانات المختلفة. تمامًا مثل شعار Java:
"إنه مكتوب مرة واحدة ، إنه يعمل في كل مكان .
" يستخدم Liquibase وصف xml ويجمعه في كود sql محدد ، اعتمادًا على قاعدة البيانات المحددة. وهو مناسب جدا للمعلمات العامة.
يتم تنفيذ كل عملية في مجموعة تغيير منفصلة ، تشير إلى المعرف واسم المؤلف. أعتقد أن اللغة المستخدمة في xml سهلة الفهم ولا تحتاج إلى شرح.
5. قم بتحميل البيانات على اللوحات الخاصة بنا ، هذا ليس ضروريًا ، ولكن نظرًا لأن اللوحات قد صنعت ، فأنت بحاجة إلى وضع شيء فيها. نحن نملأ ملف data.xml بالبيانات التالية:
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <changeSet id="insert data to test_xml_table" author="TestUsers"> <insert tableName="test_xml_table"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> <changeSet id="insert data to test_xml_table_2" author="TestUsers"> <insert tableName="test_xml_table_2"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> <changeSet id="insert data to test_sql_table" author="TestUsers"> <insert tableName="test_sql_table"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> <changeSet id="insert data to test_sql_table_2" author="TestUsers"> <insert tableName="test_sql_table_2"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> </databaseChangeLog>
يتم إنشاء ملفات الجداول المتداول ، ويتم إنشاء بيانات الجداول. حان الوقت لدمج كل هذا في أمر متداول شائع وإطلاق تطبيقنا.
أضف ملفات sql و xml إلى ملف db.changelog-master.yml:
databaseChangeLog: - include: # schema file: db/changelog/xmlSchema.xml - include: file: db/changelog/sqlSchema.sql # data - include: file: db/changelog/data.xml
والآن بعد أن خلقنا كل شيء. مجرد تشغيل طلبنا. يمكنك استخدام سطر الأوامر أو البرنامج المساعد للبدء ، لكننا سننشئ الطريقة الرئيسية فقط ونشغل SpringApplication لدينا.
عرض البيانات الوصفية
الآن بعد أن قمنا بتشغيل سكربتينا لإنشاء الجداول وتعبئتها ، يمكننا أن ننظر إلى جدول databaseChangeLog ونرى ما تم تجميعه.

نتيجة المتداول xml:
- في حقل المعرف من ملفات xml ، يظهر رأس يشير إلى أن المطور يشير إلى changeSet ، كل تغيير فردي هو سطر منفصل في قاعدة البيانات مع العنوان والوصف.
- يشار إلى مؤلف كل تغيير.
نتيجة لفة SQL:
- لا توجد معلومات مفصلة حول changeSet في حقل معرف ملفات sql.
- لم يتم الإشارة إلى مؤلف كل تغيير.
استنتاج مهم آخر لاستخدام XML هو التراجع. أوامر مثل إنشاء جدول ، تغيير الجدول ، إضافة عمود يكون التراجع التلقائي عند استخدام XML. بالنسبة لملفات sql ، يجب كتابة كل الاستعادة يدويًا.
استنتاج
الجميع يختار لنفسه ما للاستخدام. لكن خيارنا سقط على جانب XML. المعلومات الوصفية التفصيلية والانتقال السهل إلى قواعد البيانات الأخرى ، تفوقت على المقاييس من تنسيق مزود المفضل.