مقدمة
مقدمة أساسية في الربيع-data-jpa: سبب ولادة JPA هو دمج أطر ORM من طرف ثالث وإنشاء طريقة قياسية. يقول Baidu Encyclopedia أن JDK تتطور في هذا الاتجاه من أجل تحقيق وحدة ORM. ومع ذلك ، لم يتم تنفيذها بالكامل. في إطار ORM ، يعتبر السبات جيشًا كبيرًا ، يستخدم على نطاق واسع ومريح وله قدرات قوية. في الوقت نفسه ، تم دمج السبات أيضًا بشكل جيد مع JPA. يمكننا أن نعتقد أن JPA هو المعيار ، وفي الواقع ، فإن JPA هي جميع الواجهات تقريبًا ، ويتم تنفيذ التطبيقات كلها بواسطة السبات. من منظور الماكرو ، تعمل السبات بشكل جيد للغاية تحت توحيد JPA.
في الآونة الأخيرة ، كنت أستخدم Dringboot و Spring Data JPA. يمكن أن يجعلني استخدام JPA أكثر ملاءمة لتشغيل قاعدة البيانات ، لكنني واجهت العديد من المزالق أثناء الاستخدام. سوف أسجل المقال التالي. لن أقول الكثير أدناه. دعونا نلقي نظرة على المقدمة التفصيلية معًا.
مشهد:
الاستعلام الديناميكي ، والاستعلام عن الترحيل ، والاستعلام عن جداول بيانات مختلفة وفقًا للولايات المختلفة التي تم تمريرها ، واستخدم MAP لتحويل VO قبل تمرير كائن الصفحة. تؤثر أماكن الاستخدام المختلفة القابلة للبناء على صحة البيانات المليئة ، لذلك سنناقشها.
فرضية:
يتم إرفاق كائن الصفحة في VO ، وتتضمن بيانات الإرجاع بيانات مصبوبة
apimodelProperty ("record") صفحة خاصة <IctivityRecorDvo> ActivityRecorDvolist ؛ apimodelproperty ("Quantity") integer num = 0 ؛ apimodelproperty ("come") BigDecimal TotalMoney = bigDecimal.Valueof (0) ؛تطبيق غير صحيح:
قائمة <IctivityRecorDvo> ActivityRecordVolist = new ArrayList <> () ؛ if (recevesendReCordRequestvo.getSendorreceivetype () == sendorreceivetype.receive) {list <CallengerEcord> ChallengerEcordList = ChallengerCorddao.findbyuSeridandDeletype (userid ، deleteType.false) ؛ if (! collectionUtils.isempty (ChallengerEcordlist)) {ActivityRecorDvolist = ChallengerEcordList.stream () .map (هذا :: challengerToActivityRecordvo) .Collect (collectors.tolist () ؛ }} آخر إذا (recevesendRecorDrequestvo.getSendorreceivetype () == sendorreceivetype.send) {list <Ictivity> activitylist = ActivityDao.findbyUserIdandDeletype (userId ، deleteType.false) ؛ if (! collectionUtils.isempty (ActivityList)) {ActivityRecordVolist = ActivityList.stream () .map (هذا :: ActivityToActivityRecordvo) .collect (collectors.tolist ()) ؛ }}ActivityReceivesEndRecordvo.SetActivityRecordVolist (New PageImpl <> (ActivityRecordvolist ، قابلة للحياة ، ActivityRecordvolist.size ())) ؛
التحليل: يستخدم القابل للتمرير فقط pageiml جديد لتحويل القائمة إلى كائن الصفحة عند تعيينه على VO. على الرغم من أن إجمالي عدد الصفحات وإجمالي عدد الخطوط المبلغ عنها في الواجهة الأمامية صحيح ، إلا أن عدد الخطوط الموجودة في الصفحة الأولى كل شيء ، والبيانات غير طبيعية!
الطريقة المرجعية الصحيحة:
استخدم المواصفات للاستعلام ديناميكيًا ورسم خريطة كائن الترحيل المقابل وفقًا لشروط الاستعلام (يختلف رمز الكتلة هذا وفقًا للمتطلبات). في هذا الوقت ، يكون التمرير القابل للبناء في Findall فعالًا ، وسيتم عرض معلومات الترحيل الصحيحة.
مرجع كتلة الكود:
XXXCommonspecutil هي فئة أدوات مواصفات تم الإعلان عنها ذاتيا ، على غرار طريقة الاستعلام الأصلية لبيانات الربيع الأصلية JPA.
page <IctivityRecordvo> page = new pageImpl <> (ActivityRecordVolist ، قابل للباية ، ActivityRecordVolist.size ()) ؛ if (ensvesendRecorDrequestvo.getSendorReceivetype () == sendorreceivetype.receive) {المواصفات <CallengerEcord> spec = المواصفات. page = challengerecorddao.findall (spec ، fable) .map (هذا :: challengereCordToActivityRecordvo) ؛ } آخر إذا (recevesendReCordRequestvo.getSendorReceiVetype () == sendorreceivetype.send) {المواصفات <activity> spec = المواصفات. where (ActivityCommonSpeCutil.equal ("userid" ، userid)). page = ActivityDao.findall (spec ، قابلة للبلاط) .map (هذا :: ActivityToActivityRecordvo) ؛ }ملاحظة: ActivityReceivesendRecordvo مغلف VO ، والذي يحتوي على كائن الصفحة الذي تم إرجاعه
ActivityReceivesEndRecordvo.SetActivityRecordVolist (صفحة) ؛
لخص
بعد استخدام بيانات الربيع JPA لفترة طويلة ، أعتقد أن المواصفات مفيدة للغاية وليست عرضة للأخطاء. إنه أيضًا أسلوب الترميز المفضل لدي. ومع ذلك ، عادةً ما أستخدم الطريقة البسيطة والخام لـ PageImpl <> () للاستعلام عن البيانات وربط الكثير من الجداول. سأعود مباشرة في النهاية. يجب مناقشة المستوى الأعمق مرة أخرى!
حسنًا ، ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.