Daobab2 - zupełnie nowy ORM w Javie

8

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.

YouTube: Mapping Principles

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

YouTube: Type Safe Queries

4

Idzie w dobrym kierunku.
NIe wiem czym docelowo chcesz to odróżniać od JOOQ. Ale w sumie JOOQ dobra konkurencja w javie by się przydała (bo QueryDSL jakoś nieruchawy był ostatnio).

Edit:
za przygotowanie ekosystemu duży plus, forum, przykłady, video - nieźle, dużo pracy i w sumie zaczynam kibicować.

0

Po pobieżnym rzuceniu okiem na stronę oraz Twój wpis podejrzewam, że @Klaudiusz Wojtkowiak jest odpowiednią osobą do przekazania tej informacji. A brzmi ona tak: masz lekki zonk na stronie. Po kliknięciu linku "forum" otwiera się ono w nowym oknie/zakładce, ale jednocześnie powstaje "dziwne" zjawisko na stronie głównej - efekt widoczny poniżej:

screenshot-20190515093532.png

0

Widzialem na github, ze wyszla nowa wersja daobab-core - jakie sa glowne ulepszenia/poprawki w stosunku do poprzedniej wersji ?

pozdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1