Im obigen Artikel haben wir die Implementierung des EasyUi -Menüs abgeschlossen. Klicken Sie hier, um es anzuzeigen. In diesem Abschnitt schreiben wir hauptsächlich über die CategoryServiceImpl -Implementierungsklasse, um die Kaskadierungsabfrage der Datenbank abzuschließen. Im Allgemeinen erfolgt das Projekt von hinten nach vorne, erledigt zuerst den Service (wir haben DAO nicht extrahiert und schließlich extrahiert) und dann die obere Schicht nach dem Abschluss durchführen.
Schauen wir uns vor dem Schreiben die Tabellen in der Datenbank an:
Datenbank fallen lassen, wenn der Laden existiert; /*Datenbank erstellen und Codierung festlegen*/ Datenbank Shop Standard Zeichensatz UTF8; Shop verwenden; /*Administratortabelle löschen*/ Drop -Tabelle, wenn existiert Konto; /*Produktkategorie Tabelle löschen*/ Drop -Tabelle, wenn existiert Kategorie; /*===============================================================ieben ============================================================ieben =================================================================ieben ============================================================ieben Administratoranmeldenname*/ Login VARCHAR (20),/*Administrator Name*/ Name Varchar (20),/*Administratorkennwort*/ Pass varchar (20)); /*================================================================================================================ =====================================================ieben =====================================================ieben =====================================================ieben false, /* Fremdschlüssel, die Administrator diese Kategorie verwaltet* / account_id int, Constraint Aid_fk Fremdschlüssel (Account_id) Referenzen Konto (ID));
Es gibt hauptsächlich zwei Tabellen, die Produktkategorie -Tabelle und die Administratortabelle, und in der Produktkategorie -Tabelle finden Sie eine Tabelle für die zugehörige Administratorin. Das heißt, das Produkt und der Administrator sind eine viel- und ein-zu-Eins-Beziehung. Jetzt beginnen wir, Kategorieninformationen für die Abfrage von Produkten zu schreiben, und benötigen einen Kaskadierungsadministrator.
1. Implementieren Sie die Cascading -Abfragemethode
Definieren Sie zunächst diese Methode in der Kategorie -Service -Schnittstelle:
öffentliche Schnittstelle CategoryService erweitert BaseSeService <kategorie> {// Abfrage -Kategorieinformationen, Kaskadierungsadministrator Public List <Kategorie> queryJoinAccount (String -Typ); // Abfragen Sie mit dem Namen der Kategorie} Anschließend implementieren wir diese Methode in der Implementierungsklassen -KategorieserviceImpl von CategoryService:
@Service ("categoryService") öffentliche KlassenkategorieserviceImpl erweitert BaseServiceImpl <category> implementiert categoryService {@Override publiclist <kategorie> queryJoinAccount (String -Typ) {String hql = "Aus Kategorie C, wobei C.Type: Typ: Typ"; return getSession (). createEquery (HQL) .SetString ("Typ", "%" + Typ + "%"). List (); }} Unter den beiden Modellen werden wir der Annotation einen Link zuweisen:
// @Manytoone (fetch = fetchType.eager) @Joincolumn (name = "account_id") öffentliches Konto getAccount () {return this.account; } // @onetomany (Cascade = Cascadetype.All, fetch = fetCettype.lazy, mapappedby = "account") public set <category> getCategories () {return this.categories; } Dann testen wir es in der Testklasse:
@Runwith (SpringJunit4ClASSRunner.class) @ContextConfiguration (Locations = "ClassPath: beans.xml") öffentliche KlassenkategorieserviceImpleTest {@resource private categoryService categoryService; @Test public void testQueryjoinAccount () {für (Kategorie C: categoryService.queryjoinAccount ("")) {System.out.println (c); System.out.println (C.GetAccount ()); }}} 2. Probleme mit Kaskadierungsanfragen
Wenn wir uns die Ausgabe der Konsole ansehen, können wir sehen, dass sie mehr als eine SQL -Anweisung gesendet hat, aber wir haben sie nur einmal abfragt. Warum senden wir also so viele Aussagen? Dies ist das übliche 1+n -Problem. Das sogenannte 1+n-Problem besteht darin, zuerst eine Erklärung auszugeben, um das aktuelle Objekt abzufragen und dann n Anweisungen auszugeben, um das zugehörige Objekt abzufragen, sodass die Effizienz sehr niedrig wird. Hier gibt es nur zwei Objekte. Wenn es mehr Objekte gibt, wird die Effizienz stark reduziert. Wie sollen wir dieses Problem lösen?
Vielleicht werden Sie denken, dass Sie, wenn Sie Fetch so einstellen, dass FetchType.lazy generiert wird. Die bessere Lösung besteht darin, die HQL -Anweisung selbst zu schreiben und Join Fetch zu verwenden. Weitere Informationen finden Sie in der geänderten CategoryServiceImpl -Implementierungsklasse:
@Service ("categoryService") öffentliche KlassenkategorieserviceImpl erweitert BaseServiceImpl <category> implements categoryService {@Override publiclist <category> queryjoinAccount (String -Typ) {String hql = "Aus Kategorie C -links juelfetch C.Account, wobei c.type wie: type: type: type: type: type"; return getSession (). createEquery (HQL) .SetString ("Typ", "%" + Typ + "%"). List (); }} Der linke Join bedeutet, zusammen mit dem Konto abzufragen. Wenn Sie das Konto -Objekt zur Kategorie hinzufügen, wird nur eine SQL -Anweisung gesendet, und die zurückgegebene Kategorie enthält auch das Kontoobjekt.
3. Vervollständigen Sie die Paging -Funktion
Die Paginierung im Winterschlaf ist sehr einfach. Sie müssen nur zwei Methoden setFirstresult und setMaxResults aufrufen: Ändern Sie die Kategorieservice -Schnittstelle und deren Implementierungklassen -CategoryServiceImpl:
// CategoryService Public Interface CategoryService erweitert BaseSeService <kategorie> {// Abfrage -Kategorie -Informationen, Cascading Administrator Public List <Kategorie> queryJoinAccount (String -Typ, int Seite, int -Größe); // und implementieren Sie Pagination} // categoryServiceImpl @Service ("categoryService") öffentliche Klassen -CategoryServiceImpl erweitert BaseServiceImpl <category> implements categoryService {@Override public list <category> queryjoinaccount (String type, int page) {String -Typ {string hql = "von category c. category c. category c. category c. category c. category c. category c. category c. category c. category clinks yont c. return getSession (). createEquery (HQL) .setString ("Typ", "%" + type + "%") .setFirstresult ((Seite) * Größe) // setMaxResults (Größe) // mehrere .List () anzeigen; }} Testen wir es in der Testklasse:
@Runwith (SpringJunit4ClASSRunner.class) @ContextConfiguration (Locations = "ClassPath: beans.xml") öffentliche KlassenkategorieserviceImpleTest {@resource private categoryService categoryService; @Test public void testQueryjoinAccount () {für (Kategorie C: categoryService.queryjoinAccount ("", 1,2)) {// Die erste Seite, 2 Daten pro Seite system.out.out.println (c + "," + cGetaccount ()); }}} Zu diesem Zweck haben wir die Servicemethode geschrieben und die Cascading -Abfrage- und Paging -Funktionen von Produktkategorien abgeschlossen.
(HINWEIS: Am Ende werde ich den Quellcode -Download des gesamten Projekts angeben! Jeder kann gerne sammeln oder teilen.)
Originaladresse: http://blog.csdn.net/eson_15/article/details/51320212
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.