Ciele
- Vyskúšať implementáciu perzistencie bez použitia techník metaprogramovania. krok 2
- Pripraviť sa na riešenie zadaní z predmetu Metaprogramovanie. kroky
Ú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 cieľ 2
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 SQLite. 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 ciele
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.