Ciele
- Vyskúšať implementáciu perzistencie bez použitia techník metaprogramovania.
- Pripraviť sa na riešenie zadaní z predmetu Metaprogramovanie.
Úvod
Prvá úloha slúži ako príprava pre vypracovanie zadania na tomto predmete. Na rozdiele od zadania, tu sa implementácia bude ručne vytvárať pre každú triedu dátového modelu. Neskôr v rámci zadania bude úlohou automatizovať tento proces – vytvoriť takú realizáciu, ktorá bude vedieť spracovať triedy dátového modelu bez potreby implementácie špecifických podporných tried.
Postup
Krok 1: Zoznámenie sa s projektom
Predstavte, že vyvíjate aplikáciu s dvoma triedami dátového modelu: Employee a Department. Aplikácia bude ukladať informácie o objektoch týchto tried do databázy H2. Na získavanie a ukladanie dát do databázy sa budu používať objekty implementujúce rozhranie PersistenceManager:
public interface PersistenceManager<T> {
/**
* Get specific object from database.
*
* @param id Identifier of the object
* @return New object based on the database row, or empty if specified
* identifier is not present in database.
*/
Optional<T> get(long id);
/**
* Get all objects from the database.
*
* @return List of new object based on database contents.
*/
List<T> getAll();
/**
* Save object state into database.
* If object had <code>id</code> field different to zero then database
* update would be performed, otherwise insert would be performed and
* generated id would be stored in the <code>id</code> field.
*
* @param object Object to save.
*/
void save(T object);
}
Úloha 1.1
Stiahnite si projekt s pripravenými doménovými triedami a sadou testov. Preskúmajte kód testov a požiadavky na triedy manažérov perzistencie, ktoré sú v nich implementované.
Krok 2: Implementácia
Pre každú triedu dátového modelu bude nutné implementovať vlastný PersistenceManager, ktorý bude implementovať špecifické operácie pre danú triedu.
Úloha 2.1
Implementujte triedy DepartmentManager a EmployeeManager. Využite pritom poskytnuté jednotkové testy.
Poznámka
Pri zadávaní dát do SQL požiadaviek odporúčam využiť triedu PreparedStatement.
Poznámka
Na získanie hodnoty primárneho kľúča, vygenerovanej databázou, použite metódu PreparedStatement.getGeneratedKeys(). Musíte pritom použiť prepínač RETURN_GENERATED_KEYS pri vytváraní objektu PreparedStatement.