obiect de acces la date (DAO)

Object Data Access (DAO). nivel de clasă -6

  • 10.07.15 07:05 •
  • combinezon •
  • • # 262243
  • • Habrahabr
  • 8 •
  • 3474

- cum ar fi Forbes, doar mai bine.

La proiectarea sistemului informatic identifică unele straturi care sunt responsabile pentru interacțiunea diferitelor module ale sistemului. O conexiune bază de date este una dintre cele mai importante componente ale cererii. Întotdeauna a evidențiat o parte a modulului de cod, otvechayuschayuschy pentru transmiterea cererilor către baza de date și prelucrarea răspunsurilor primite de la ea. În general, definiția Data Access Object descrie ca un strat între baza de date și sistem. DAO abstrage esența sistemului și le face de cartografiere la baza de date, definește metodele generale de utilizare a compusului, prepararea sa, de închidere și (sau) revenirea la conexiunea Pool.

Vertex ierarhie DAO este o clasă abstractă sau interfață cu descrierea metodelor generale, care sunt utilizate atunci când interacționează cu baza de date. De regulă, această metodă de căutare, îndepărtarea cheii, actualizare, etc.


Un set de metode nu este completă, aceasta depinde de sistemul particular. K este de tip fictiva esența cheie, tabelul care descrie rare entitatea nu are o cheie primară. Doar în această clasă, ar fi logic să se plaseze metoda de închidere a prepareStatement instanță.

Nivelul clasei


DAO implementarea clasei de nivel presupune utilizarea unui singur apel, o conexiune pentru mai mult de o metodă DAO moștenită de clasă. În acest caz, în partea de sus a ierarhiei DAO AbstractController. deoarece câmpul este declarat conexiune. O clasă abstractă este după cum urmează.


Trebuie remarcat faptul că, în acest exemplu, vom obține o instanță de conexiune de la un bazin de conexiuni, care se află, respectiv, de a face sau de a folosi soluții gata făcute. Crearea metode de obținere a getPrepareStatement (String sql) și închiderea acesteia closePrepareStatement (PreparedStatement ps). Punerea în aplicare a clasei DAO specifice, cu aceeași logică, nu ar trebui să fie aproape de metoda lor de conectare la baza de date. Conexiunea este închisă în acea parte a logicii de afaceri, din care a fost invocată metoda. Un exemplu de clasă DAO specific va arăta așa.


Instanță conexiune disponibilă metoda getPrepareStatement (String sql). care, la rândul său, este disponibil pentru orice metodă particulară de clasa DAO. Trebuie reamintit faptul că este necesar să se închidă prepareStatement exemplu atunci când în cele din urmă lucrează în blocuri, și a reveni la returnConnectionInPool compus piscina (), în logica sistemului în cazul în care metoda a fost numit.


PreparedStatement acolo pentru a nu pierde timpul pe compilarea de fiecare dată, respectiv, creându-l de fiecare dată când se degradeaza salbatic de performanță, creați-o în constructor și depozitați-l în PreparedStatement clasa compilat.

connectionPool = ConnectionPool.getConnectionPool ();
Metoda statica returneaza connectionPool? O idee foarte proastă, astfel încât testarea devine foarte dificilă. și clasele cuplate strâns, este mai bine să treacă ca parametru constructorului sau chiar prin injectare Dependență.


Nu este nevoie să scrie bine, dacă există o excepție de prokinut trebuie să fie mai mare sau cel puțin zalogirovat (dar face excepție dvs., și în continuare prokinut mult mai bine). Se înțelege că exemplul, dar nu predau rău ...

public boolean șterge (Integer id)
boolean crea (entitate Planet)

În scopul verificării, totul era în ordine în Java este mult mai bine de a utiliza aruncarea de excepție, returnează boolean acestor metode este de obicei o idee rea pentru mai multe motive, nu în ultimul rând pentru că va trimite spam cod care utilizează dvs. verificări inutile de clasă, după fiecare apel de funcție și nu permit să utilizeze toate puterea de excepție.


În cazul în care metoda nu este încă gata de a arunca excepție de mai bine mult mai bine neverificate, cum ar fi UnsupportedOperationException.

Utilizați întotdeauna ArrayList (Ozhidaemyy_razmer_kollektsii) în loc de LinkedList pentru a crea lista de, de la baieti Oracla implicate performanta JVM a spus că performanța LinkedList, în practică, este întotdeauna mai rău decât ArrayList.

Cei care au pus mai pot explica ce este mai sus nu sunteți de acord? Chiar mă întreb poate ști mai multe despre LinkedList ...