في المقالة أعلاه ، أكملنا تنفيذ قائمة Easyui. انقر هنا لعرضه. في هذا القسم ، سنكتب بشكل أساسي عن فئة تنفيذ CatevoryServiceImpl لإكمال الاستعلام المتتالي لقاعدة البيانات. بشكل عام ، يتم تنفيذ المشروع من الخلف إلى المقدمة ، أولاً ، نفعل الخدمة (لم نستخرج DAO ، واستخرجنا أخيرًا) ، ثم نفعل الطبقة العليا بعد الانتهاء.
قبل الكتابة ، دعونا نلقي نظرة على الجداول الموجودة في قاعدة البيانات:
إسقاط قاعدة البيانات إذا كانت موجودة متجر ؛ /*إنشاء قاعدة بيانات وقم بتعيين الترميز*/ إنشاء مجموعة الأحرف الافتراضية لمتجر قاعدة البيانات UTF8 ؛ استخدم متجر ؛ /*حذف جدول المسؤول*/ جدول DROP إذا كان هناك حساب ؛ /*حذف جدول فئة المنتج*/ جدول إسقاط إذا كان هناك فئة ؛ /*==========================================================================================سف =================================================================================================================================================================== ============================================================================================================================================================================= =================================================================================================================================================================== اسم تسجيل الدخول المسؤول*/ تسجيل الدخول varchar (20) ،/*اسم المسؤول*/ name varchar (20) ،/*Administrator Password*/ pass varchar (20)) ؛ /*===============================================================سف ======================================================================================================================================================== ======================================================================================================================================================== ================================================================================================================================================ خطأ ، /* المفتاح الأجنبي ، الذي يدير المسؤول هذه الفئة* / account_id int ، حساب CORRINT AED_FK المفتاح الأجنبي (account_id) حساب المراجع (ID)) ؛
يوجد أساسا جدولين ، جدول فئة المنتج وجدول المسؤول ، ويتم توفير جدول المسؤول المرتبط بمفتاح خارجي في جدول فئة المنتج. أي أن المنتج والمسؤول هو علاقة كثيرة. نبدأ الآن في كتابة معلومات الفئة للاستعلام عن المنتجات ، ونحن بحاجة إلى مسؤول متتالي.
1. تنفيذ طريقة الاستعلام المتتالية
أولاً ، حدد هذه الطريقة في واجهة الخدمات الفئة:
Enterface CatevoryService يمتد Baseservice <category> {// معلومات فئة الاستعلام ، القائمة العامة المسؤول المتتالي <Category> QueryJoinAccount (نوع السلسلة) ؛ // استعلام باسم الفئة} ثم نقوم بتنفيذ هذه الطريقة في فئة التنفيذ CatevoryServiceImpl of CatevoryService:
Service ("CategoryService") فئة الفئة العامة يمتد BaseserviceImpl <Category> تنفيذ CatevoryService {Override Public List <Category> QueryJoInAccount (نوع السلسلة) {String Hql = "من الفئة C حيث C.Type مثل: type" ؛ return getSession (). createquery (HQL) .SetString ("type" ، "٪" + type + "٪"). list () ؛ }} من بين النموذجين ، سنقوم بتعيين رابط للشرح:
// ManyToOne (fetch = betchtype.eager) joincolumn (name = "account_id") حساب public getAccount () {return this.account ؛ } // onetomany (cascade = cascadetype.all ، petch = fetchtype.lazy ، medby = "account") set public <category> getCategories () {return this.categories ؛ } ثم نختبره في فئة الاختبار:
Runwith (springJunit4ClassRunner.Class) contextConfiguration (مواقع ClassPath: Beans.xml ") الفئة العامة الفئة serviceimpltest {resource فئة الفئة الخاصة ؛ test public void testqueryjoinAccount () {for (الفئة C: categoryservice.queryJoInAccount ("")) {system.out.println (c) ؛ System.out.println (C.GetAccount ()) ؛ }}} 2. مشاكل مع الاستفسارات المتتالية
إذا نظرنا إلى إخراج وحدة التحكم ، فيمكننا أن نرى أنه أرسل أكثر من عبارة SQL واحدة ، لكننا لم نتمكن إلا من الاستعلام عنه مرة واحدة ، فلماذا نرسل العديد من العبارات؟ هذه هي مشكلة 1+n الشائعة. تتمثل مشكلة ما يسمى 1+n في إصدار بيان للاستعلام عن الكائن الحالي ، ثم إصدار عبارات n للاستعلام عن الكائن المرتبط ، وبالتالي تصبح الكفاءة منخفضة للغاية. لا يوجد سوى كائنين هنا. إذا كان هناك المزيد من الكائنات ، فسيتم تقليل الكفاءة بشكل كبير. كيف يجب أن نحل هذه المشكلة؟
ربما تعتقد أنه إذا قمت بتعيين Fetch لإنشاء fetchtype.lazy ، فلن تنشر عبارات متعددة ، ولكن هذا بالتأكيد غير ممكن ، لأنه بعد تعيينه على كسول ، لا يمكننا الحصول على كائن الحساب. الحل الأفضل هو كتابة بيان HQL بأنفسنا واستخدام Join Fetch. للحصول على تفاصيل ، انظر إلى فئة تنفيذ CatevoryServiceImpl:
Service ("CategoryService") فئة الفئة العامة يمتد BaseserviceImpl <Category> تنفيذ CatevoryService {Override Public List <Category> QueryJoInAccount (نوع السلسلة) {String HQL = "من الفئة C اليسار اليسار JAIND JUNCOUNT حيث يشبه c.type: النوع" ؛ return getSession (). createquery (HQL) .SetString ("type" ، "٪" + type + "٪"). list () ؛ }} تعني اليسار للاستعلام مع الحساب ، وتجلب وسيلة لإضافة كائن الحساب إلى الفئة ، بحيث سيتم إرسال عبارة SQL واحدة فقط ، ويحتوي الفئة التي يتم إرجاعها أيضًا على كائن الحساب.
3. أكمل وظيفة الترحيل
ترقيم ترقيم السبات بسيط للغاية. ما عليك سوى استدعاء طريقتين setFirStresult و SetMaxResults: دعنا نعدل واجهة الخدمات الفئة وفرقة فئة التنفيذ الخاصة به:
// CategoryService Public Interface Enterface ExplySevice Extraphervice <category> {// query query information ، stailing administ public list <Category> QueryJoinAccount (نوع السلسلة ، صفحة int ، حجم int) ؛ // وتنفيذ ترقيم الصفحات} // catevoryserviceImplsperiS ("CategoryService") يمتد فئة الفئة العامة على أساس BaseserviceImpl <Category> CategoryService {Override Public List <Sture> queryjoinAccount (نوع السلسلة ، int size) {string hql = " return getSession (). createquery (HQL) .SetString ("type" ، "٪" + type + "٪") .SetFirStresult (((صفحة 1) * الحجم) // show .setMaxResults (size) // show anist .list () ؛ }} دعنا نختبره في فئة الاختبار:
Runwith (springJunit4ClassRunner.Class) contextConfiguration (مواقع ClassPath: Beans.xml ") الفئة العامة الفئة serviceimpltest {resource فئة الفئة الخاصة ؛ test public void testqueryjoinAccount () {for (الفئة C: categoryservice.queryjoinAccount ("" ، 1،2)) {// عرض الصفحة الأولى ، 2 قطعة من البيانات لكل صفحة system.out.println (c + "،" + c.getAccount ()) ؛ }}} تحقيقًا لهذه الغاية ، انتهينا من كتابة طريقة الخدمة وأكملنا وظائف الاستعلام والترحيل المتتالية لفئات المنتجات.
(ملاحظة: في النهاية ، سأقدم تنزيل الكود المصدري للمشروع بأكمله! الجميع مرحب بهم لجمع أو مشاركة)
العنوان الأصلي: http://blog.csdn.net/eson_15/article/details/51320212
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.