Praktikum 4. Liidestamine andmebaasiga.
Kassasüsteem on täienenud, kliendilt on saabunud rohkelt lisasoove. Täienenud on:
Lisandunud on:
Muudatuste ülevaade:
- Kõiki andmeid hoitakse nüüd relatsioonilises andmebaasis HSQLDB.
- On lisandunud Hibernate'i tugi, mida kasutatakse kassasüsteemi Java-rakenduse mugavaks liidestamiseks SQL andmebaasiga.
Lisandunud Ant targetid:
ant startdb
- käivitab HSQLDB andmebaasiserveriant dbmanager
- käivitab andmebaasi graafilise kasutajaliidese
NB! Nii kassasüsteem ise (ant run
) kui andmebaasi graafiline liides (ant dbmanager
) eeldavad, et andmebaas on eelnevalt käivitatud! (Ava eraldi aken, käivita selles ant startdb
ning jäta aken lahti/protsess jooksma.)
ÜLESANDED KLASSIS
Ülesanne 1. SQL päringud.
Käivitada taustal andmebaas (ant startdb
) ning avada andmebaasi kasutajaliides (ant dbmanager
). Koostada mõningaid lihtsamaid SQL-päringuid, mis kassasüsteemi andmebaasi vastu käivitades annaksid mõistlikke tulemusi. Testida päringuid läbi andmebaasi graafilise liidese. Koostada järgmised päringud:
- Päring, mis leiab kõik müüdud kaubad.
- Päring, mis leiab ühe ostutehingu kõik müüdud kaubad.
- Päring, mis lieab kõige populaarsema kaubaartikli (kaup, mida on ühikuliselt kõige rohkem ostetud).
- Päring, mis leiab kõige suurema käibega kaubaartikli (müüdud kogus * tükihind).
Ülesanne 2. Hibernate ja JPA annotatsioonid.
Hibernate'iga tutvumiseks võtame aluseks lihtsa näidisrakenduse: hibernateExercise.zip.
Täiendada algset rakendust, lisades mudeli klassides @Transient
väljadele JPA annotatsioonid, mis kirjeldaksid õiged mappingud Java mudeliklasside ja andmebaasi tabelite vahel. Kui lahendus on õige, annab programm teile sellise väljundi. Midagi muud peale annotatsioonide muuta ei ole vaja.
Ant käsud:
ant startdb
- andmebaasi käivitamine (tuleb teises aknas käivitada enne programmi käivitamistant run
- programmi käivitamine. Prindib konsooli andmebaasist saadud andmed.
Näidisrakenduse andmemudel näeb välja selline:

ÜLESANDED KODUS
Ülesanne 1. SQL päringud.
Analoogselt esimesele klassiülesandele kirjutada ning esitada SQL-keelsed päringud, mis tagastavad järgmist:
- Päring, mis tagastab edetabeli klientidest, kes on toonud kassale kõige suuremat käivet.
- Päring, mis tagastab kuupäeva, millel on tehtud kõige rohkem käivet.
Päringute testimisel on ilmselt abiks eelnevalt andmebaasi pisut suurema hulga erinevate andmete sisestamine (pole reaalne testida küsitud päringute korrektset käitumist, kui andmebaasis on ainult 1-2 klienti või kõik ostud on sooritatud ühel ja samal kuupäeval).
Ülesanne 2. Kassasüsteemi täiendamine.
- Täiendada objekti
Client.java
ja tema hibernate annotatsioone.- Igal kliendil peaks olema perekonnanimi.
- Perekonnanimi peab olema mapitud vastava andmebaasi väljaga.
- Täiendada programmi kuvama kliendi perekonnanime ostude vaates.
- Realiseerida use caseides toodud kõrvalstsenaariumid A ja B.
- Realiseerida peakasutusloost punktid 5 ja 6 (kliendi allahindluse arvestamine ostu sooritamisel)
Ülesanded eeldavad, et andmeid loetakse ja kirjutatakse andmebaasi, kasutades selleks Hibernate'i!
Kodutööde esitamisel järgida esimese praktikumi materjalis toodud nõudeid SVN repositooriumi struktuurile! SalesSystemi uus kood laadida uude kausta, mitte kirjutada üle vana trunk!
VIITED
- Hibernate
- SQL (tutorial)
- JPA (Java Persistence API)
- JEE API javadoc (ainult JPA dokumentatsiooni vaatamiseks valige "Packages" alt "javax.persistence")
- tutorial "Understanding the Java Persistence API" (ignoreerige 3ndal leheküljel olevat OpenJPA konfigureerimise osa, praktikumis kasutatakse OpenJPA asemel Hibernate'i. Kõik muu on sama.)
- koodinäiteid JPA kasutamise kohta (vt OneToMany, ManyToOne jt)
- HSQLDB
- Java annotatsioonidest üldiselt