ORM

Technika mapująca tabele bazy na obiekty w kodzie aplikacji. Pozwala pracować z danymi bez ręcznego pisania SQL, np. Hibernate czy Eloquent.

ORM (Object-Relational Mapping) to technika, która łączy dwa światy mówiące zupełnie innymi językami: relacyjną bazę danych (tabele, wiersze, kolumny) i kod aplikacji (obiekty, klasy, metody). Zamiast ręcznie pisać zapytania SQL i ręcznie przepisywać wyniki na obiekty, opisujesz raz, że klasa User odpowiada tabeli users — a biblioteka ORM zajmuje się tłumaczeniem w obie strony.

W praktyce ORM przejmuje brudną robotę: generuje SELECT, INSERT, UPDATE i DELETE, mapuje kolumny na pola obiektu, obsługuje relacje (jeden-do-wielu, wiele-do-wielu) i często śledzi, które obiekty zmieniłeś, żeby zapisać tylko to, co trzeba. Dzięki temu zamiast myśleć o tabelach, myślisz o danych w kategoriach swojej domeny — user.posts zamiast joina po kluczu obcym.

Jak wygląda to w kodzie

Weźmy Eloquent z Laravela (PHP). Pobranie aktywnych użytkowników to po prostu:

$users = User::where('active', 1)->orderBy('name')->get();

ORM zamienia to na SELECT * FROM users WHERE active = 1 ORDER BY name i zwraca kolekcję gotowych obiektów. W świecie Javy analogiczną rolę pełni Hibernate (implementacja standardu JPA), w Pythonie SQLAlchemy albo Django ORM, w .NET Entity Framework, a w Node.js Prisma czy TypeORM. Idea wszędzie ta sama, różni się tylko składnia i poziom „magii”.

Na co uważać

Największa pułapka to problem N+1: pętla po 100 użytkownikach, gdzie dla każdego osobno dociągasz jego zamówienia, generuje 101 zapytań zamiast jednego. Rozwiązanie to tzw. eager loading (np. with('orders') w Eloquent albo JOIN FETCH w Hibernate). Klasyk, na którym potyka się każdy junior — i niejeden senior na produkcji.

Drugi mit: „ORM zwalnia mnie z myślenia o SQL”. Nie zwalnia. ORM jest świetny do typowego CRUD-u, ale przy ciężkich raportach, agregacjach czy zapytaniach z dziesięcioma joinami wygenerowany SQL bywa wolny albo dziwny. Warto umieć podejrzeć surowe zapytanie (większość ORM-ów ma logowanie SQL) i w razie potrzeby napisać je ręcznie. ORM to narzędzie, nie zaklęcie.

Pamiętaj też, że ORM dokłada warstwę abstrakcji, a każda abstrakcja ma swój koszt — wydajnościowy i poznawczy. Dla prostego skryptu czasem zwykłe zapytanie jest po prostu prostsze.

Pojęcia powiązane

SQL, relacyjna baza danych, model danych, migracje, query builder, JPA, wzorzec Active Record i Data Mapper, lazy loading oraz eager loading, problem N+1.