Dobre praktyki

Usuwanie obiektów

Złe podejście (wywołanie obiektu DAO):

def object = dao.getById(1);
dao.remove(object);


Dobre rozwiązanie (ciało metody wewnątrz obiektu DAO):

def session = getSession();

String hql = "delete from sample where id = :target";

Query query = session.createQuery(hql);
query.setParameter("target", 1);
query.executeUpdate(); 


Wniosek: W złym podejściu niepotrzebnie pobieramy cały obiekt, skoro tak naprawdę potrzebujemy tylko jego identyfikator do usunięcia. 



Pobieranie listy obiektów z bazy danych

W zależności od typu obiektu przechowywanego w bazie danych programista powinien zastanowić się nad zaimplementowaniem wydajnej metody do pobierania listy obiektów. Nie ma najmniejszego problemu, jeżeli obiekt to na przykład profil użytkownika składający się z trzech właściwości: imię, nazwisko i e-mail. Problem pojawia się wtedy kiedy profil ten zawiera także obrazek zapisany jako tablica bajtów. Przy wywołaniu metody dao.getAll() z bazy pobrane zostaną wszystkie obrazki, to znacznie spowolni działanie aplikacji. Te tablice bajtów w większości przypadków nie są potrzebne w warstwie prezentacji.

Przykład prawidłowej implementacji metody getAll:

def session = getSession();

String hql = "select firstname, lastname, email from Profile";

Query query = session.createQuery(hql);

return query.list();


Uwaga: W zapytaniu HQL używamy nazw właściwości obiektu a nie nazw kolumn w bazie danych. Podobnie postępujemy z klasami i nazwami tabel.