1. مقدمة
(1) MySQL هو نظام قاعدة بيانات علائقية ، قاعدة البيانات الأكثر استخدامًا وشاملة لشركات الإنترنت اليوم. إنها قاعدة بيانات من جانب الخادم يمكنها تحمل الزيارات المتزامنة العالية.
(2) Spring-Data-JPA هو تطبيق طبقة المستودع المتوفرة بموجب مواصفات JPA. يمكن تطويره باستخدام أطر التنفيذ المختلفة مثل السبات و OpenJPA وغيرها من الأطر. هذا يمكن أن يجعل المستودع بسيطًا ويحل اقترانه مع طبقة العمل.
في هذه الدراسة ، نستخدم mysql + spring-data-jpa لبناءها. تستخدم طريقة تنفيذ JPA السبات. يستخدم تجمع اتصال قاعدة البيانات DBCP للاتصال.
2. بناء المشروع
1. تقديم التبعيات المتعلقة بـ MySQL و JPA:
<!-التبعيات ذات الصلة بـ SPRING-JDBC-> <REPERENCED> <VERLED> org.springframework </rougeid> <STIFACTID> spring-jdbc </stiftid> </premidency> <!-التبعيات ذات الصلة للتواصل مع mysql-> <sperence> <nuperid> mysql </groupency <StifactId> mysql-connector-java </stifactid> </sependency> <!-تبعيات JPA تشمل spring-data-jpa و spring-pring و hibernate لدعم jpa-> <sperence> <roupered> org.springframework.boot </groupid> <StifactId> Spring-Boot-Starter-Data-JPA </stifactid> </premency>
ثلاثة تبعيات تحتاج إلى تقديم. JDBC هو التبعية المطلوبة بواسطة Spring دمج MySQL. والثاني هو اعتماد برنامج تشغيل قاعدة البيانات لـ MySQL ، والثالث هو التبعية المتعلقة بـ Data-JPA:
ويشمل تبعيات مثل AOP و JDBC و SPRING-IRM و TRAMPATION API و Hibernate لدعمه. لذلك JPA الافتراضيات لتنفيذها باستخدام السبات.
2. تكوين ملف التكوين:
نختار ملف تنسيق .IML لملف التكوين ونستخدم DPCP2 لتكوين معلمات تجمع الاتصال:
1) التكوين المتعلق بالمشروع:
الخادم: #Configuration رقم منفذ المنفذ: 8088SPRING: التطبيق: #Configuration Service اسم الاسم: CMS-sep
فيما يلي المعلومات ذات الصلة حول تكوين فتح الخادم ، وتكوين اسم الخادم ومنفذها بشكل أساسي
2) التكوين المتعلق بـ MySQL
Spring: #Data Source و JPA تكوين البيانات: #تم تعيين URL url -ssl to to to to url false: jdbc: mysql: // localhost: 3306/crm؟
فيما يلي بعض التكوينات المتعلقة بقواعد البيانات ، وخاصة تكوين عنوان URL للحساب والحساب وكلمة المرور. معلومات التكوين بعد عنوان URL هي تنسيق الترميز لـ MySQL المتصل وما إذا كان يتم تمكين تشفير SSL.
3) التكوين المتعلق بـ DBCP
الربيع: #ما يلي هو تكوين DBCP2 لمجموعة الاتصال ذات الصلة: #Initialize حجم تجمع حجم الحجم الأولي: 10 #Sitting الحد الأدنى لعدد تجمعات الاتصال MIN-EDLE: 10 #التكوين الحد الأقصى لعدد المتجمع زمنية بين الإدارة--Millis: 200000 #التكوين الحد الأدنى لوقت البقاء على قيد الحياة في تجمع المصلحة إزالة الإزالة على الصيانة: 200000
يتم تكوينه بشكل رئيسي كبعض معلومات تجمع الاتصال ، ويتم عرض تفاصيل التكوين في التعليقات أعلاه.
4) يعتمد Spring-Data-JPA على التكوين المتعلق بـ Ihibernata
الربيع: JPA: #Configure قاعدة بيانات قاعدة البيانات قاعدة بيانات: mysql #configure ما إذا كان يجب طباعة sql show-sql: true #hibernate التكوين hibernate: #configure cascade مستوى ddl-auto: تحديث naming: org.hibernate.dialect.mysql5dialect
التكوين هو نوع قاعدة بيانات الاتصال ، وما إذا كان يجب طباعة سلسلة SQL و Hibernate ، هناك عدة أنواع:
1) التحقق من صحة- عند تحميل السبات ، تحقق من إنشاء بنية جدول قاعدة البيانات.
2) إنشاء- إعادة إنشاء في كل مرة يتم فيها تحميل السبات ، يتم إعادة إنشاء هيكل جدول قاعدة البيانات ، وهو سبب فقدان بيانات جدول قاعدة البيانات.
3) إنشاء drop الذي تم إنشاؤه عند تحميل السبات ، والخروج هو حذف بنية الجدول.
4) تحديث التحديث-cascade تحميل kibernate يقوم تلقائيا بتحديث بنية قاعدة البيانات.
هنا نختار التحديثات المتتالية ونتكرر على الجدول الأصلي.
هناك نوعان من استراتيجيات التسمية:
1) ، org.springframework.boot.orm.jpa.hibernate.springphysicalnamingstrategy leveled leture capital plus "_".
2) ، org.hibernate.cfg.ImprovednamingsTrategy لا تسمية التعديل.
3. تكوين الفئات ذات الصلة:
يجب تكوين فئة التكوين في دليل أفقي أو دليل فرعي مع الفئة الهوائية قبل تكوينه بنجاح. هنا نستخدم تكوين فئة Java بدلاً من طريقة XML للتكوين:
/*** @Function الوصف: فئة للتكوين المتعلق بـ MySQL* Author Administrator* /// يتم استخدام السطر التالي لفرز واجهة التعليقات التوضيحية للتعامل مع مشكلات أولوية التحميل. يحتوي على اثنين من المتغيرات التعداد @order (order.highest_precedence) // يمثل السطر التالي هذا الفئة باعتبارها فئة التكوين @configuration // يمثل السطر التالي هذا الفئة لتمكين إدارة المعاملات @enabletranctactionmanagement (proxytargetclass = true) // يمكن أن يتم تعريفها أيضًا على أنها فئة مثل deptropository.class. @componentscan.filter (type = filtertype.annotation ، value = service.class)} enablejparepositories (basePackages = "com.hzt. **. ropository") public mysqlconfig PROSESTEXCEPTIONTRANSLationPostProcessor () ؛ }}
1) التعليق التوضيحي @order ، يستخدم لتكوين أولوية التحميل للفئة ، له متغيران التعداد:
order.highest_precedence- integer.min_value - الحد الأدنى للقيمة ، بأولوية أعلى
order.lowest_precedence -integer.max_value -maximum قيمة ، بأقل أولوية
2) التعليق التوضيحي لـ Configuration ، مما يعني أن هذه الفئة هي فئة تكوين
3) enableTransActionManagement إدارة المعاملات لـ MySQL proxyTargetClass = الوسائل الحقيقية لتمكين إدارة المعاملات للفئة
4) يستخدم enablejparepositories لتكوين المعاملات. هنا يتم تمثيل المسار بتعبير CGNL ، ويمكن أيضًا تعريفه على أنه فئة محددة ، مثل deptrepository.class
يمكن أن يتضمن العنصر الفردي الخاص به تحديد معترضات المعاملات ، مثل includefilters = { @componentscan.filter (type = filterType.annotation ، value = service.class)}
4. رسم خرائط Java الفئة ذات الصلة:
1) بنية جدول قاعدة البيانات
2) رسم خرائط فئة الكيان
entity // يمثل هذا النوع من فئة كيان التعيين لجدول @table (name = "tbl_dept") // اضبط اسم الجدول المقابل قسم الفئة العامة الأدوات التسلسلية { /*** الوصف الوصف: التفرد أثناء التسلسل ، تم حذف أساليب GET والتعيين المقابلة. */ خاص ثابت نهائي طويل المسلسل = 1L ؛ /** المفتاح الأساسي -id uuid*/id // تعني هذه الملاحظة أن الحقل هو المفتاح الأساسي للفئة generatedValue (generator = "system -uuid") genericgenerator (name = "system -uuid" ، strategy = "uuid") // name -حدد اسم العمود المقابل ، الطول maximum (maximum engult = " /** numeral ، فريدة من نوعها*///nullable - هل يمكن أن تكون فارغة ، افتراضية إلى حقيقية فريدة - سواء كانت فريدة من نوعها ، افتراضية إلى false column (name = "no" ، nullable = false ، فريدة من نوعها = صحيح) عدد صحيح خاص ؛ / ** اسم القسم*/ column (name = "name" ، فريدة = true ، nullable = false) اسم السلسلة الخاصة ؛ / ** إدارة القسم المفتاح الأساسي -id uuid*/ column (name = "manager" ، فريدة = صواب ، nullable = false) Manager Private String ؛ / ** الوصف القسم*/ column (name = "الوصف") وصف السلسلة الخاصة ؛ / ** قسم الهاتف*/ column (name = "phone") سلسلة سلسلة خاصة ؛ / ** قسم الهاتف*/ column (name = "phone") سلسلة سلسلة خاصة ؛ / ** وقت إنشاء القسم*/ column (name = "createTime") dateTimeFormat (pattern = "YyyyM-MM-DD HH: MM: SS") Private Date CreateTime ؛ / ** وقت تعديل القسم*/ column (name = "edittime") dateTimeFormat (pattern = "yyyy-mm-dd hh: mm: ss") private date time ؛} (1) ، يمثل @بنية الجدول لهذا النوع من التعيين كقاعدة بيانات
(2) ، table (name = "tbl_dept") يتم استخدام هذا التعليق التوضيحي لتكوين العلاقة بين فئة الكيان ورسم خرائط الجدول. يمثل الاسم اسم الجدول المعين.
(3) التعليق التوضيحي المعني يعني أن هذه الفئة هي مفتاح أساسي
(4) ، يتم استخدام توضيح GeneratedValue لتكوين المعلومات الأساسية المتعلقة بالمفتاح الأساسي ، ويتم استخدام سمة المولد لتكوين استراتيجية التوليد. هناك قيم التعداد التالية:
1.Auto - يتم التحكم في المفتاح الأساسي بواسطة البرنامج.
2. الهوية - تم إنشاؤها تلقائيًا بواسطة قاعدة البيانات.
3. مناسبة - يحدد المولد المستخدم لإنشاء المفتاح الأساسي.
4. التسلسل - إنشاء المفاتيح الأولية بناءً على تسلسل قاعدة البيانات الأساسية.
5. الجدول - استخدم جدول قاعدة بيانات معين لحفظ المفتاح الأساسي.
6. تمثل النظام-Uuid استخدام UUID الذي تم إنشاؤه بواسطة النظام للمطابقة.
(5) التعليق التوضيحي column لتكوين المعلومات المتعلقة بالأعمدة 1. يتم استخدام حقل الاسم لتحديد حقل التعيين المعين إلى بنية الجدول.
2. يمثل الطول قيد الطول لهذا الحقل ويمكن حذفه.
3. تمثل السمة الفريدة ما إذا كان هذا الحقل لديه قيود فريدة ممكّنة. الافتراضي خاطئ ، والفريد صحيح.
4. يعني Nullable ما إذا كان هذا الحقل يمكن أن يكون فارغًا ، والافتراضي صحيح. خطأ يعني أنه لا يمكن أن يكون فارغا.
(6) يتم استخدام dateTimeFormat لتعيين وقت جدول قاعدة البيانات.
تم حذف الأساليب المقابلة والتعيين.
3) تطبيق طبقة DepTrepository
كما هو موضح في الشكل ، فإن Respository هو مواصفات واجهة ، مع وجود ميراث مختلف للواجهة الفرعية. بالإضافة إلى ورث جميع وظائف الواجهة الأصل ، ستضيف كل واجهة فرعية أيضًا طرقًا إضافية للتطبيقات المختلفة. تحدد فئة Crudrepository الطريقة الأساسية ويتم توسيع فئاتها الفرعية بشكل منفصل.
على سبيل المثال ، بالإضافة إلى ورث جميع طرق Crudrepository ، فإن فئة PagingandsortingRepository توسعها أيضًا ، مما يضيف طرقًا ذات صلة للبحث عن الترحيل:
Iterable <T> findall (فرز الفرز) ؛ صفحة <T> findall (قابلة للسياسة قابلة للباحة) ؛
يتم توسيع jParePository على أساس pagingandsortingrepository.
1. طبقة المستودع:
يمثل repository أن هذه الفئة تدار بحلول الربيع ، وهي طبقة داو
/*** function الوصف: واجهة طبقة DAO لعملية تشغيل جدول الإدارة* Author Administrator*/ @ropository // repository هذا هو واجهة DAO Layer Public Exptrepository تمتد JParePository <dept ، string> {}اعتمادًا على فئة التنفيذ ، لديها طرق مختلفة للاتصال بها. بشكل عام ، يمكن للجميع معرفة استخدام هذه الطريقة من خلال معرفة الاسم والمعنى. في النوع العام ، تمثل المعلمة الأولى فئة الكيان من خريطة الجدول ، وتمثل المعلمة الثانية نوع المفتاح الأساسي.
2. تطبيق طبقة الخدمة:
/*** function الوصف: فئة التنفيذ لعمليات خدمة القسم* Author Administrator*/ @servicepublic class deptServiceImpl تنفذ DeptService {/** فئة معالجة السجل*/logger النهائي الخاص = loggerfactory.getLogger (getClass ()) ؛ @Autowired الخاص مستودع DepTrepository ؛ Override Public Dept QueryById (string id) يلقي استثناء {try {dept result = repository.findone (id) ؛ log.info (result.toString ()) ؛ نتيجة العودة } catch (استثناء e) {log.info (e.toString () ، e) ؛ رمي ServiceException ("استثناء حدث أثناء الاستعلام وفقًا للمعرف!") ؛ }}}حيث Findone هي الطريقة التي يتم تنفيذها بواسطة JParePository.
3. تنفيذ طبقة التحكم:
@restController@requestMapping ("/API/V1/DEPT") الفئة العامة DeptController {/** فئة التسجيل*/logger private = loggerfactory.getLogger (getClass ()) ؛ / ** خدمتي الخاصة*/ خدمة خدمة DeptService الخاصة ؛ /*** function الوصف: طريقة لاستعلام محتوى قسم الاستعلام استنادًا إلى المعرف* @DEPT DEPT*/getMapping ("/id/get") النتيجة العامة getById (معرف السلسلة) يلقي استثناء {VERIFY (New VERIFYPARAM ("معرف القسم" ، معرف)) ؛ إرجاع نتيجة جديدة ("تم الحصول عليها بنجاح من خلال ID!" ، service.querybyid (id)) ؛ }}حيث تمثل RestController وحدة التحكم التي تُرجع تنسيق JSON ، يحدد REquestMapping عنوان URL لخريطة الفئة الخاصة به. البيانات التي نقبلها هنا هي نوع سلسلة عادي. إذا كنت بحاجة إلى قبول نوع JSON ، فأنت بحاجة إلى معرف سلسلة requestbody لتكوين معلمات الطلب لقبوله.
4. الاختبار:
محاكاة إرسال طلبات الحصول على طلبات لإكمال تكامل وتكوين Dring-Data-JPA و MySQL.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.