Interfața de interogare are următoarele metode:
list () - execută interogarea, rezultatul este returnat colecției Listă;
executeUpdate () - pentru a efectua ștergeri, modificări aplicate obiectelor multiple;
session.createQuery ("șterge din companie unde status = 'closed'") executeUpdate ();
setString (index int, valoare String). setDate () și așa mai departe.
setează parametrul la interogare după index;
session.createQuery ("șterge din companie unde status =?") setString (0, 'închis') executeUpdate ();
De asemenea, puteți seta parametrul după nume:
session.createQuery ("șterge din companie unde status =: stat") setString ('stat', 'closed') executeUpdate ();
iterate () - returnează Iteratorul pe baza rezultatelor interogării
Iterator it = createQuery ("de la companie"). Iterate ();
Obiectele și colecțiile cu durată lungă de viață sunt obiecte cu un singur fir, de scurtă durată care conțin o stare persistentă
și funcțiile de afaceri. Acestea pot fi obișnuite obiecte JavaBean / POJO (obiecte simple vechi Java), caracteristica lor distinctivă fiind aceea că sunt asociate cu o sesiune (sesiune). Odată ce sesiunea este închisă, aceste obiecte devin deconectate și gratuite pentru utilizare la orice nivel al aplicației, de exemplu, direct ca obiecte de transfer de date spre și de la stratul de prezentare.
Obiectele și colecțiile temporare sunt exemple de clase de lungă durată care nu sunt asociate în prezent
cu sesiune. Acestea pot fi obiecte create de aplicație și nu sunt încă traduse într-o stare de lungă durată.
Tranzacția net.sf.hibernate.Transaction este un obiect cu durata scurtă de viață, utilizat cu o singură fire, folosit de aplicație pentru a indica unitatea atomică a lucrării efectuate. Rezumă cererea din tranzacțiile JDBC, JTA sau CORBA. În unele cazuri, o singură sesiune poate genera mai multe tranzacții:
commit () - fixează tranzacția bazei de date;
rollback () - obligă tranzacția să revină.
Interfața net.sf.hibernate.connection.ConnectionProvider este un furnizor de conexiune, o fabrică și un pool pentru conexiunile JDBC. Abstracte aplicația din obiectele de bază Datasource sau DriverManager. Obiectul intern Hibernate nu este disponibil pentru aplicație, dar poate fi extins sau implementat de dezvoltator. metode:
close () - eliberează toate resursele ocupate de furnizorul de conexiune;
closeConnection (Connection conn) - închide conexiunea utilizată;
configure (Properties props) - inițializează furnizorul de conexiune din proprietățile trecute.
Fabricata de tranzactii net.sf.hibernate.TransactionFactory este fabrica pentru instantele clasei Tranzactie. Obiectul intern Hibernate nu este disponibil pentru aplicație, dar poate fi extins sau implementat de dezvoltator.
beginTransaction (sesiune SessionImplementor) - începe tranzacția și returnează obiectul.
Cea mai simplă aplicație a claselor de mai sus când se adaugă
în implementările servlet ale metodelor generateAndExecuteCreationScript ()
și createProperties () arată astfel:
/ * exemplu # 5: cea mai simplă aplicație de hibernare. MainServlet.java * /
Evident, dacă servletul va re-crea obiectul SessionFactory de fiecare dată când este accesat, atunci acest proces va fi prea consumator de timp atât din punct de vedere al performanței sistemului, cât și din punct de vedere al dezvoltatorului, atunci când sistemul este extins. De aceea, ar trebui să creați o clasă ale cărei sarcini vor fi crearea și inițierea necesară a obiectelor Configuration, SessionFacroty și una din metodele de clasă va returna obiectul Session terminat. Prin urmare, în metoda servlet, puteți utiliza obiectul Session ready pentru a afișa conținutul tabelelor bazei de date și a încărca parametrii de interes din ea.
Folosind secvența de mai sus, clasa ConnectionFactory este creată pentru a inițializa fișierele de mapare și pentru a manipula corect conexiunea la baza de date. Sa observat că în unele versiuni ale hibernării, în ciuda directivei autoReconnect = true. re-conectarea automată la baza de date are loc a doua oară, adică conexiunea are loc imediat, dar există o excepție în legătură cu imposibilitatea de conectare la baza de date.
/ * exemplul # 8: maparea inițializării și conectarea la baza de date:
Această clasă verifică conexiunea la baza de date și salvează timpul de scanare. Dacă clasa este "inactiv" pentru mai mult de 10 minute în momentul verificării, atunci conexiunea la baza de date este re-conectată. Dacă clasa este ștearsă, aceasta împiedică scurgerea memoriei. Deși Hibernate are instrumentele necesare pentru a exclude necesitatea conectării fiecărui fișier hbm.xml separat, cel mai bine este să o faceți manual pentru a evita erorile de mai sus.
Această clasă se ocupă de erorile care au apărut în practică atunci când lucrați cu Hibernate, driverul JDBC MySQL și serverul de bază de date MySQL.
Interacțiunea cu baza de date
Când lucrați cu o bază de date, este convenabil să colectați funcții de manipulare cu obiecte și să creați manageri de tranzacții.
/ * exemplul # 9: maparea inițializării și conectarea la baza de date. StudentDAO.java * /
clasa publica StudentDAO
// verificați existența unei înregistrări în baza de date
static static Student BooleanExists (login pentru coarde)
Student _student = null;
// creați o interogare în baza de date
"de la Student a where a.login =: login");
/ * această metodă vă permite să obțineți rezultate unice. Este necesar să se asigure unicitatea rezultatelor la nivelul bazei de date, dacă se folosește această funcție * /
_student = (Student) query.uniqueResult ();
> captură (HibernateException e)
Clasa SessionFactory se referă la clasele securizate cu fir, de obicei, obiectul său va fi creat odată și stocat într-o variabilă statică. Dacă există probleme cu baza de date, cu un pool de conexiuni sau
cu eliberarea de resurse stocate în obiectul SessionFactory. atunci poate fi necesar să se sprijine abordarea de mai sus.
Două sesiuni sunt utilizate pentru gestionarea sesiunii:
Sesiune pentru fiecare operație cu baza de date sau Sesiune pentru solicitare în contextul tranzacției.
Începând cu versiunea 3.1, Hibernate are un nou parametru hibernate.current_session_context_class. care poate lua una din cele trei valori scurte, "jta", "thread" și "managed",
sau clase care implementează interfața org.hibernate.context.CurrentSessionContext și vor fi responsabile pentru deschiderea / închiderea sesiunii.
Dacă această opțiune este setată în fișierul de configurare, atunci în cod pentru a obține sesiunea, trebuie doar să apelați metoda SessionFactory.getCurrentSession (), care fie returnează o sesiune legată deja de acest context, fie creează o sesiune nouă.
Prin setarea proprietății în fișierul de configurare
static public void deleteStudent (Student_student)
Tranzacție tx = null;
> captură (HibernateException e)
În acest caz, conexiunea va fi gestionată de clasa org.hibernate.context.ThreadLocalSessionContext, care va utiliza conexiunea până când va fi apelată metoda beginTransaction ()
și, prin urmare, eliberați conexiunea atunci când este apelată metoda commit () sau rollback ().
Fugiți de sub Apache Ant
Pentru a începe proiectul sub Apache Ant, este necesar ca folderele proiectului să fie organizate după cum urmează:
Fișierul build.xml servește drept ghid pentru acțiunea Ant. Inițial ar trebui să arate astfel: