Witam
Dzień jak co dzien a tu wyszedł Daobab w wersji 2.0 :)
Co nowego? Sporo.. po pierwsze, to już nie jest rozszerzenie JPA, lecz niezależny ORM, z własnym innowacyjnym systemem opisywania encji.
Opiera się na następujących założeniach:
- kolumny opisywane są poprzez interfejsy - Każda kolumna o unikalnej nazwie i typie, posiada po stronie Javy dedykowany interfejs, który ją opisuje. Interfejsy takie mogą być implementowane w różnych encjach.
- tabele opisywane są poprzez encje oparte na strukturze mapy. Encje implementują tyle interfejsów kolumn, ile kolumn posiada tabela w bazie danych.
- encje nie wystawiają własnych getterów i setterów
- Primary Key to dodatkowy interfejs.
- odseparowanie kwerendy od konkretnego datasourca - Kwerendy nie są związane z żadnym konkretnym schematem, mogą być wykonywane na dowolnym datasource, posiadającym wskazane struktury.
- wprowadzony obiekt Target jako miejsce wykonania kwerendy. Może to być baza danych, bufor w pamięci lub zdalny serwer.
- wbudowany generator klas, za pomocą którego w prosty sposób można wykonać reverse engineering.
Zmiana idei mapowania otworzyła drzwi na szereg nowych możliwości:
- jeszcze prostsza pełna obiektowość kwerend (np.podajesz cały obiekt encji a potrzebna wartość jest z niego pobierana)
- dużo prostsze tworzenie selectów - Select.one pobiera jeden element (encje,pole,projekcje), Select.from pobiera kolekcje tych obiektów.
if (Select.one(db, tabApp).where(tabApp.colAppId(),f.getAppId())==null){
throw new RecordAlreadyExists("appid = "+f.getAppId());
}
- kwerenda jako obiekt. W każdym momencie możesz ją dodatkowo uporządkować orderem lub zamienić np na counta.
- "chainowane" encje i kwerendy
- automatyczne CRUD na poziomie encji (jeśli zawiera PK)
- automatyczne pobieranie obiektów z relacją FK do PrimaryKey z poziomu encji (OneToOne,OneToMany)
- automatyczne pobieranie obiektów z relacją ManyToMany za pomocą tabeli pośredniej - z poziomu samej encji
- pełne wsparcie dla joinów - Po raz pierwszy są one tak banalnie proste. Nie musisz ich hardcodować na poziomie encji lub specyfikować w kilku liniach kodu w kryteriach.
Select.from(db, tabGroup.colID())
.join(tabUser,AND().and(tabUser.colSso(),req.getSso()))
.join(tabAppUser, tabUser.colUserId())
.join(tabAppGroup,tabAppUser.colAppId(),tabGroup.colGroupId())
.result();
- wsparcie dla HAVING, GROUP BY, funkcji, kontroli znaków...
- nielimitowana ilość DSów - bez żadnej dodatkowej konfiguracji.
- wewnętrzne zarządzanie transakcją, możliwość programowego zarządzania transakcją z poziomu programisty
Oprócz tego:
- niezwykle proste testowanie kwerend z poziomu JUnit
- debug pełnego SQLa wraz z wartościami - łatwa do debugu po stronie DataBase IDE
- automatyczne wypisanie kwerendy SQL w przypadku błędu
- generowanie odpowiedników encji w TypeScript
Poza tym wszystko co świetne w poprzedniej wersji zostaje:
- wygodne pisanie kwerend SQL jako obiektowy kod javowy
- TypeSafe queries - nie popełnisz błędu.
- pełna obiektywność kwerend, encji, kolumn, targetów.
- encje, które posiadają cechy opisane w swoich interfejsach za pomocą których możesz tworzyć abstrakcyjne kwerendy.
- buforowanie wybranych tabel do pamięci i ultra szybkie wykonywanie tych samych kwerend w buforze zamiast na bazie danych.
Zachęcam do odwiedzin strony http://www.daobab.io