LUCRARE DE LICEN¢‚ - acse.pub. J2SE – Java Standard Edition MVC – Model View Controller ORM

  • View
    239

  • Download
    6

Embed Size (px)

Text of LUCRARE DE LICEN¢‚ - acse.pub. J2SE – Java Standard Edition MVC...

Universitatea Politehnica Bucureti

Facultatea de Automatic i Calculatoare

Departamentul de Automatic i Ingineria Sistemelor

LUCRARE DE LICEN

Sistem Object Relational Mapping in Java

Bucureti,2013

Coordonator l. Dr. Ing. tefan Ioan Sacal

Absolvent George-Alin Dragomir

CUPRINS

Abstract 4

Notaii i Abrevieri 5

List de figuri 6

List de secvene de cod 7

1. Introducere 8

1.1 Contextul 8

1.2 ORM (Object Relational Mapping) 9

1.3 Motivatia dezvoltrii unui sistem ORM 10

1.4 Descrierea proiectului 11

2. Alegerea Platformei 12

3. Tehnologii folosite 13

3.1 IDE(Mediu integrat de dezvoltare) 13

3.2 Sisteme de management ale bazelor de date relaionale 16

3.2.1 PostgreSQL 16

3.2.2 Microsoft Sql Server 16

3.3 API-uri folosite 17

3.3.1 API-ul de JDBC(Java Database Connectivity) 17

3.3.2 API-ul de Reflection 18

3.3.3 API-ul de SWT(Standard Widget Toolkit) 19

3.3.4 API-ul pentru crearea de fiiere PDF 21

4. Dezvoltarea aplicaiei 22

4.1 Cerinele aplicaiei 22

4.2 Arhitectura 23

4.3 Structura proiectului 24

4.4. Funcionalitile sistemului i tratarea problemelor 27

5. Testarea aplicaiei 38

5.1 Fereastra principal 38

5.2 Fereastra Medic 39

5.3 Fereastra Farmacist 43

5.4 Fereastra Pacient 44

6. Concluzii i Dezvoltri ulterioare 47

6.1 Dezvoltri ulterioare 47

6.2 Concluzii 47

7. Bibliografie 48

ANEX COD 50

Abstract

Proiectul i propune a fi o aplicaie de dezvoltare a unui sistem de ORM (Object Relational

Mapping) care s implementeze cele patru funcii principale de lucru cu baza de date, select, update,

insert, delete.

El presupune familiarizarea cu API-urile de JDBC i de Reflection, implementarea mini

ORM-ului i dezvoltarea unei aplicaii de test pentru acesta.

Alegerea acestui proiect se datoreaz lucrului cu astfel de sisteme , dar fr s fi avut o

nelegere de ansamblu asupra funcionrii interne.

Pentru dezvoltarea aplicaiei am folosit limbajul de programare Java, API-uri pentru JDBC,

Reflection, SWT i creare de PDF i ca sisteme de management al bazelor de date am ales cele mai

reprezentative dou sisteme PostgreSQL i Microsoft Sql Server.

Notaii i Abrevieri

API Application Programming Interface

AWT Abstract Window Toolkit

DB Database

GWT Google Web Toolkit

IDE Integrated Development Environment

JDBC Java Database Connectivity

JPA Java Persistance API

JVM - Java Virtual Machine

J2EE Java Enterprise Edition

J2ME Java Micro Edition

J2SE Java Standard Edition

MVC Model View Controller

ORM Object Relational Mapping

PDA Personal Digital Assistant

PK Primary Key

POO Programare Orientat pe Obiecte

SGBD Sistem de Gestiune a Bazelor de Date

SQL Structured Query Language

SWT Standard Widget Toolkit

6

List de figuri

Fig. 1.1 ORM legtura dintre obiecte i SGBD p9

Fig 2.1. Fluxul de compilare i rulare al unei clase p12

Fig. 3.1. Meniul Source p14

Fig. 3.2. Fereastr generare getteri/setteri p14

Fig. 3.3. Meniu aprut la apsarea combinaiei de taste p15

Fig. 3.4. Palet de componente p19

Fig. 3.5. Palet de elemente n SWT p20

Fig. 3.6. Exemplu de caset cu proprietile unui element p20

Fig. 3.7. Clas pentru dezvoltarea n mediul grafic p21

Fig. 4.1. Arhitectura unei aplicaii complete ce folosete un ORM p24

Fig. 4.2. Organizarea intern a proiectului p24

Fig. 5.1. Fereastra principal p38

Fig. 5.2. Fereastra de categorii p39

Fig. 5.3. Fereastra pentru medici de familie p39

Fig. 5.4. Vizualizarea programrilor p41

Fig. 5.5. Medicin naturist p42

Fig. 5.6. Medicin Veterinar p42

Fig. 5.7. Farmacist p43

Fig. 5.8. Fereastra pentru programare p44

Fig. 5.9. Mesaj n cazul n care programarea s-a fcut cu success p44

Fig. 5.10. Mesaj n cazul n care programarea nu este posibil p45

Fig. 5.11. Coloanele tabelului reete p45

Fig. 5.12. Clasa Reteta ce mapeaz tabelul retete p46

7

List de secvene

Secvena 4.1.- Date pentru conexiunea la baz p27

Secvena 4.2. Formarea parametrilor i stabilirea conexiunii p28

Secvena 4.3. Extragerea unei adnotri prezente pe clas i studierea parametrului acesteia p28

Secvena 4.4. Extragerea valorii id-ului p29

Secvena 4.5. Studiul adnotrii Column pentru maparea unui cmp p30

Secvena 4.6. Obinerea valorii id-ului p30

Secvena 4.7. Instanierea unui obiect folosind Reflection p31

Secvena 4.8. Metoda delete(Object) p31

Secvena 4.9. Studiul ordinii coloanelor p32

Sevena 4.10. Metoda save(Long, List) p32

Secvena 4.11. Tratarea obiectelor de tip String i Date p32

Secvena 4.12.- Tratarea ultimei poziii la update p33

Secvena 4.13. Tratarea ultimei poziii la insert p33

Secvena 4.14. Metode generice p34

Secvena 4.15. Exemplu de apel metod generic p34

Secvena 4.16. Extragerea numelui coloanei cu id-ul p34

Secvena 4.17. Formarea listei cu numele coloanelor p35

Secvena 4.18. Exemplu de utilizare list de nume coloane p35

Secvena 4.19. Generarea id-ului p36

Secvena 4.20. Adnotarea Table p36

Secvena 4.21. Adnotarea PK p37

Secvena 4.22. Adnotarea Column p37

Secvena 4.23. Adnotarea NotPersistent p37

Secvena 4.24. Adnotarea NotNull p37

Secvena 4.25. Adnotarea FK p38

Secvena 5.1. Salvarea unei reete p40

Secvena 5.2. Exemplu de folosire readAll p41

Secvena 5.3. Exemplu de folosire metoda read p43

8

1. Introducere

1.1 Contextul

nc de la apariia modelului de baze de date relaionale programatorii au simit

nevoia s sporeasc posibilitile acestui model i s-l fac mai flexibil. Un salt uria n acest

sens a fost fcut n anii 90, atunci cnd limbajele orientate-obiect au nceput s capete o

influen tot mai mare.

O prim ncercare de a lega obiectele din POO cu tabelele unei baze de date a fost

fcut n anul 1992 de compania NeXT (companie nfiinat de Steve Jobs la mijlocul anilor

80). Soft-ul dezvoltat nu era un ORM n adevratul sens al cuvntului, el fiind mai apropiat

de JDBC-ul din Java. Acest sistem purta denumirea de DbKit i reprezenta un layer de

abstractizare, care asemntor JDBC-ului de astzi permitea accesul la diferite baze de date

fr obligativitatea de a scrie cod specific bazelor de date. Pornind de la acest sistem,

dezvoltatorii de la NeXT au lansat mai apoi un framework de ORM complet.

Totui, primul sistem ce poate fi considerat un ORM a fost dezvoltat pentru limbajul

SmallTalk de o mic firm din Canada i s-a numit TopLink. n 1996 a aprut i prima

versiune pentru Java.

Prima versiune de TopLink permitea printre altele:

a) s mapeze cmpurile bazei de date pe atributele obiectelor

b) s realizeze conversie ntre tipurile atributelor i tipurile cmpurilor pe care se mapeaz

c) posibilitatea de a mapa o nregistrare din baza de date pe mai multe obiecte

Dei aparent dezvoltarea unui astfel de sistem pare c a venit de la sine, o perioad

semnificativ de timp s-a lucrat la rezolvarea conflictelor dintre limbajele orientate-obiect i

sistemele de gestiune ale bazei de date.

Este cunoscut faptul c o baz de date prezint pentru fiecare tabel o cheie primar

care identific n mod unic o nregistrare. Spre deosebire de nregistrrile din baza de date,

obiectele din Java pot s fie identice, caz n care au aceai valoare i aceeai adres n

memorie, sau egale, avnd doar acceai valoare.

Alte diferene sunt legate de concepte precum motenire, granularitate, asociere. n

ceea ce privete motenirea, obiectele din Java accept motenire simpl i preiau atributele i

metodele obiectului motenit. n schimb, bazele de date nu cunosc noiunea de motenire.

Conceptul de asociere se refer la modul de legare a dou entiti fie n Java, fie n

baze de date. Dac n Java asocierile sunt unidirecionale, n baze de date acestea sunt

bidirecionale i se fac prin intermediul cheii externe. n cazul n care se doresc legturi

bidirecionale n Java, se poate declara n fiecare obiect un cmp de tipul celuilalt obiect.

Granularitatea se refer la problema legat de numrul de obiecte din model

comparativ cu numrul de tabele din baz. Pentru a se putea face maparea obiectelor pe baza

de date este necesar existena unei corespondene. Prin urmare cele dou numere trebuie s

fie egale.

9

1.2 ORM (Object Relational Mapping)

Dup cum am precizat, ORM-ul a aprut n perioada n care limbaj