Site-ul personal al Grigoryev alexei - hibernare încă o dată despre hibernare sau a început

Hibernare: Încă o dată în privința hibernării sau a început

Hibernate - o tehnologie care permite de a lucra cu entitățile într-o bază de date, ca și cum ar fi obiecte locale într-un mod diferit - ORM (Object-relațională cartografiere), legarea obiectelor bazei de date, crearea unei „baze de date obiect virtual“.







De exemplu, în linia de hibernare de cod

Va salva cartea în baza de date. Confortabil? Este destul de convenabil să petreacă ceva timp pentru a studia această tehnologie.

Deci, sub tăiere, încă un cont din seria "Hibernate: Getting Started" și un exemplu de lucru.

Pregătit pentru

Hibernatul însăși poate fi descărcat de pe site-ul oficial, dar nu sunt furnizate toate bibliotecile necesare pentru lucrul cu acesta. Dar totuși recomand să îl descărcați, pentru că există o documentație și, până la acea dată, o nouă versiune poate ieși.

În primul rând, voi descrie pe scurt cum funcționează acest lucru. În program, vom crea clase pentru a le asocia cu entitățile din baza noastră de date. În literatura engleză, astfel de clase sunt numite și poje - simple java odjects. Ele conțin un set de câmpuri private, pentru fiecare dintre ele există un getter și setter, un constructor implicit (care este fără parametri), precum și orice alți constructori, dacă se dorește. De obicei, acest lucru este suficient pentru astfel de cursuri.

Clasele java sunt legate de tabelele din baza de date utilizând un fișier special de cartografiere, care specifică câmpurile de clasă care corespund coloanelor bazei de date.

Prima dată când accesați hibernarea, acesta citește toate setările din fișierul hibernate.cfg.xml. în care este stocat șirul de conectare la baza de date, login / password, sunt specificate căile spre fișierele de mapare.

Alte funcții sunt puse în aplicare, logica de afaceri aplicația corespunzătoare, dar punerea în aplicare a acestora lasă mult mai puțin timp în comparație cu JDBC tradiționale - după toate interacțiune reduce programator pentru a lucra cu site-uri „locale“ și conservarea periodice.

Să începem

Ca DBMS, folosesc MySQL.

Acum, să începem să creăm clase de java - aceleași entități, cu aceleași conexiuni ca în baza noastră de date. Acestea vor fi clasele de carte, autor, cititor și folosire. Ei vor avea un câmp ascuns, fiecare dintre entități este, cum ar fi noi le-am creat în baza noastră de date, un set de setteri și getteri, și a stabilit designeri (un posibil constructor implicit are argumente).

În parte voi cita aceste clase:

Asociem clasele cu o bază

Acum este timpul să spunem hibernare că aceste clase sunt o cartografiere a obiectelor din baza de date. Pentru a face acest lucru, utilizați fișiere de cartografiere speciale, care sunt un fișier xml cu un set de instrucțiuni.

Instrucțiunile sunt conținute în etichete , care conține

indică câmpul cheie care trebuie utilizat pentru comunicare;

indică multiplicitatea relației dintre această entitate și cealaltă, în acest exemplu este mult-la-multe.

Fiecare dintre aceste etichete are un set propriu de parametri, care sunt cel mai bine vizualizați cu un exemplu:

Fiecare câmp are o etichetă

indicând ce coloană din tabela de baze de date pentru a lega această proprietate;







Vă voi da fișierele care descriu aceste linkuri:

Există încă o relație unu-la-unu, dar având în vedere faptul că este aproape nefolosită, voi omite examinarea ei.

De asemenea, atrag atenția asupra faptului că atunci când se implementează o comunicare de la mulți la mulți, opțiunea cu o legătură indică tabela intermediară AUTHORSBOOKS. nu pe AUTORI.

Dar nu este necesar să scrieți toate acestea cu mâinile - totul sa făcut deja pentru noi. Dacă ați instalat plug-in pentru Eclipse, puteți crea aceste generator de coduri de fișiere, făcând clic pe pachetul cu obiectul dorit pe butonul din dreapta al mouse-ului, selectați nouă -> alte ... și lista de hibernare de «hibernare fișier de mapare». Se bifează clasele necesare pentru generare și se uită rezultatul.

În al doilea rând, folosim un câmp cheie cu auto-incrementare și nu-l specificăm pe noi înșine, deci în parametrul de pretutindeni schimbăm atribuirea la nivel nativ.

În al treilea rând, nu creează o relație multi-la-multe, deci conducem rezultatul cu pixuri.

personalizabil

Acum trebuie să configuram hibernarea în sine, să spunem ce bază de date folosim, care fișiere de card trebuie să ne conectăm.

Aici este fișierul meu de configurare, cred în el și totul este clar. Mai întâi urmați setările de conectare, apoi specificați calea către fișierele cu hărți. Opțiunea cu codificare ar trebui specificată dacă proiectul utilizează chirilic, altfel toate caracterele ruse vor ajunge la MySQL ca o grămadă de semne de întrebare.

Dacă setați valoarea proprietății show_sql la true, aceasta va returna toate interogările pe care le generează la stdout. Pentru a vedea cum funcționează, este mai bine să o lăsați adevărată.

Acest fișier ar trebui pus în directorul rădăcină pentru toate fișierele sursă, în cazul proiectului în eclipse este dosarul src /. Am pus-o acolo, sunați la hibernate.cfg.xml.

Acum creăm un manager de sesiuni special pentru lucrul cu hibernarea. Noi creăm un pachet separat pentru el, în el o clasă și scrie:

Când se face apel la metoda getSessionFactory (), hibernatul va fi inițializat, va citi toate setările, va lega obiectele de tabelele din baza de date.

programabile

Deci, să definim ce metode putem folosi pentru a lucra cu înregistrări în baza de date. De exemplu:

  • adaugand;
  • ștergerea;
  • schimba;
  • obținerea întregii liste;
  • obtinerea elementului prin id;

Creați o interfață care descrie aceste funcții. Interfața va crea una generalizată:

Punem în aplicare această interfață.

Complet aici nu voi conduce, interesat poate descărca codul sursă atașat și rumble în ea. Vă voi spune doar că următoarele metode ale clasei sesiunii sunt folosite pentru a interacționa cu baza de date:

session.save (el); - salvați elementul în baza de date;
session.update (el); - Actualizați elementul;
session.delete (el); - șterge;
session.saveOrUpdate (el); - salvați sau actualizați;
el = (E) sesiune.get (elementClass, elId); - obțineți elementul prin id;
els = sesiune.createCriteria (elementClass) .list (); - lista tuturor elementelor.

Când am implementat această interfață, am aplicat niște trucuri - acordați atenție designerului. Obținerea unei clase (un obiect de tip de clasă utilizând un șir de tip E.class) nu este posibilă în Java, dar interacțiunea cu baza de date din hibernare se face folosind clase - criteriile indică ce clasă să obțină. Prin urmare, a fost creat un constructor care ia un obiect de tip de clasă ca parametru. Rețineți că clasa ElementDAOImpl nu este destinată utilizării directe, ci ar trebui să fie moștenită și să determine în mod explicit tipul elementului. De exemplu:

Așa că am implementat toate celelalte clase.

Acum creați o singură clasă care vă permite să manipulați direct datele:

Acum puteți lucra cu baza de date:

Cu toate acestea, acest set de funcții nu este deloc ceea ce ne-ar plăcea. Mai degrabă, dar numai foarte puțin. Prin urmare, este necesar să se implementeze funcții corespunzătoare logicii de afaceri date a aplicației. De exemplu:

  • adăugați o serie de cărți dintr-un fișier text;
  • da o carte;
  • accepta cartea;
  • Găsiți toate cărțile pe care cititorul le-a făcut vreodată;
  • găsiți toate cărțile expirate;

În hibernare, există trei moduri de a genera prelevarea de probe dintr-o bază de date.

  • Utilizarea limbajului de interogare HQL;
  • Utilizarea criteriului API;
  • Utilizând SQL normal.

Să analizăm fiecare dintre aceste opțiuni separat.

HQL este foarte asemănător cu SQL normal, principala diferență fiind că interogarea este formată ca un obiect. Ar fi bine să vă dau câteva exemple:

Un alt exemplu interesant în care, ca urmare a unei interogări, se creează un obiect:

Firește, obiectul ar trebui să aibă un astfel de constructor, altfel hibernează blesteme, spunând că un constructor potrivit nu a fost găsit. Se obține un amestec de sql și java.

Da, am uitat să spun că parametrii din interogare sunt înlocuiți utilizând apelul pentru funcții







Articole similare

Trimiteți-le prietenilor: