Začíname s jOOQ

1. Úvod

V tomto výučbe sa chystáme na krátku prehliadku spustenia aplikácie s jOOQ (Java Object Orientated Query). Táto knižnica generuje triedy Java na základe databázových tabuliek a umožňuje nám vytvárať typovo bezpečné dotazy SQL pomocou jej plynulého rozhrania API.

Preberieme celé nastavenie, pripojenie k databáze PostgreSQL a niekoľko príkladov operácií CRUD.

2. Maven závislosti

Pre knižnicu jOOQ budeme potrebovať nasledujúce tri závislosti od jOOQ:

 org.jooq jooq 3.13.4 org.jooq jooq-meta 3.13.4 org.jooq jooq-codegen 3.13.4 

Budeme tiež potrebovať jednu závislosť pre ovládač PostgreSQL:

 org.postgresql postgresql 42.2.16 

3. Štruktúra databázy

Než začneme, vytvorme pre naše príklady jednoduchú schému DB. Použijeme jednoduchý Autor a an Článok vzťah:

vytvoriť tabuľku AUTHOR (ID celé číslo PRIMARY KEY, FIRST_NAME varchar (255), LAST_NAME varchar (255), AGE integer); vytvoriť tabuľku ČLÁNOK (ID celé číslo PRIMÁRNY KLÍČ, TITLE varchar (255) nie null, POPIS varchar (255), AUTHOR_ID celé číslo CONSTRAINT fk_author_id REFERENCES AUTHOR);

4. Pripojenie k databáze

Poďme sa teraz pozrieť na to, ako sa pripojíme k našej databáze.

Najskôr musíme do databázy poskytnúť používateľa, heslo a úplnú adresu URL. Tieto vlastnosti použijeme na vytvorenie a Pripojenie objekt pomocou DriverManager a jeho getConnection metóda:

Reťazec userName = "užívateľ"; Reťazcové heslo = "prejsť"; Reťazec url = "jdbc: postgresql: // db_host: 5432 / baeldung"; Pripojenie conn = DriverManager.getConnection (adresa URL, meno používateľa, heslo); 

Ďalej musíme vytvoriť inštanciu DSLContext. Tento objekt bude našim vstupným bodom pre rozhrania jOOQ:

DSLContext context = DSL.using (conn, SQLDialect.POSTGRES);

V našom prípade prechádzame okolo POŠTY dialekt, ale je k dispozícii niekoľko ďalších, napríklad H2, MySQL, SQLite a ďalšie.

5. Generovanie kódu

Na vygenerovanie tried Java pre naše databázové tabuľky budeme potrebovať nasledovné jooq-config.xml spis:

   org.postgresql.Driver jdbc: postgresql: // db_url: 5432 / baeldung_database meno používateľa heslo org.jooq.codegen.JavaGenerator org.jooq.meta.postgres.PostgresDatabase public. * com.baeldung.jooq.model C: / projects / baeldung / tutoriály / jooq-examples / src / main / java 

Vlastná konfigurácia vyžaduje zmeny v oddiel, do ktorého umiestnime poverenia do databázy a do priečinka časť, v ktorej konfigurujeme názov balíka a adresár umiestnenia pre triedy, ktoré vygenerujeme.

Ak chcete spustiť nástroj na generovanie kódu jOOQ, musíme spustiť nasledujúci kód:

GenerationTool.generate (Files.readString (Path.of ("jooq-config.xml")));

Po dokončení generovania dostaneme dve nasledujúce triedy, z ktorých každá zodpovedá svojej databázovej tabuľke:

com.baeldung.model.generated.tables.Article; com.baeldung.model.generated.tables.Author;

6. CRUD Operácie

Teraz sa pozrime na niekoľko základných operácií CRUD, ktoré môžeme vykonávať s knižnicou jOOQ.

6.1. Tvorenie

Najskôr vytvorme nový Článok záznam. Aby sme to mohli urobiť, musíme sa dovolať nový záznam metóda so správnym odkazom na tabuľku ako parametrom:

ArticleRecord article = context.newRecord (Article.ARTICLE);

The Článok. ČLÁNOK premenná je referenčnou inštanciou k ČLÁNOK databázová tabuľka. Automaticky ho vytvoril jOOQ počas generovania kódu.

Ďalej môžeme nastaviť hodnoty pre všetky potrebné vlastnosti:

article.setId (2); article.setTitle ("príklady jOOQ"); article.setDescription ("Niekoľko príkladov operácií jOOQ CRUD"); article.setAuthorId (1);

Nakoniec musíme vyvolať obchod metódu záznamu uložiť do databázy:

article.store ();

6.2. Čítanie

Teraz sa pozrime, ako môžeme načítať hodnoty z databázy. Ako príklad vyberieme všetkých autorov:

Autori výsledku = context.select () .from (Author.AUTHOR) .fetch ();

Tu používame vyberte metóda kombinovaná s od klauzula na označenie, z ktorej tabuľky chceme čítať. Vyvolávanie aportovať metóda vykoná dotaz SQL a vráti vygenerovaný výsledok.

The Výsledok objekt implementuje Iterable rozhranie, takže je ľahké iterovať nad každým prvkom. A keď máme prístup k jedinému záznamu, jeho parametre môžeme získať pomocou príkazu getValue metóda so správnym odkazom na pole:

author.forEach (author -> {Integer id = author.getValue (Author.AUTHOR.ID); String firstName = author.getValue (Author.AUTHOR.FIRST_NAME); String lastName = author.getValue (Author.AUTHOR.LAST_NAME); Celé číslo age = author.getValue (Author.AUTHOR.AGE); System.out.printf ("Autor% s% s má id:% d a vek:% d% n", meno, priezvisko, id, vek);} );

Výberový dopyt môžeme obmedziť na množinu konkrétnych polí. Načítajme iba ID a názvy článkov:

Výsledok articles = context.select (Article.ARTICLE.ID, Article.ARTICLE.TITLE) .from (Author.AUTHOR) .fetch ();

Môžeme tiež zvoliť jeden objekt pomocou fetchOne metóda. Parametre pre tento parameter sú odkaz na tabuľku a podmienka na porovnanie správneho záznamu.

V našom prípade stačí vybrať Autor s id rovným 1:

AuthorRecord author = context.fetchOne (Author.AUTHOR, Author.AUTHOR.ID.eq (1))

Ak podmienke nevyhovuje žiadny záznam, fetchOne metóda sa vráti nulový.

6.3. Aktualizuje sa

Na aktualizáciu daného záznamu môžeme použiť aktualizovať metóda z DSLContext objekt kombinovaný s a nastaviť vyvolanie metódy pre každé pole, ktoré musíme zmeniť. Po tomto vyjadrení by mala nasledovať a kde doložka s náležitou podmienkou zhody:

context.update (Author.AUTHOR) .set (Author.AUTHOR.FIRST_NAME, "David") .set (Author.AUTHOR.LAST_NAME, "Brown") .where (Author.AUTHOR.ID.eq (1)) .execute ();

Aktualizačný dotaz sa spustí, až keď zavoláme vykonať metóda. Ako návratová hodnota dostaneme celé číslo, ktoré sa rovná počtu záznamov, ktoré boli aktualizované.

Je tiež možné aktualizovať už načítaný záznam vykonaním jeho obchod metóda:

ArticleRecord article = context.fetchOne (Article.ARTICLE, Article.ARTICLE.ID.eq (1)); article.setTitle („Nový názov článku“); article.store ();

The obchod metóda sa vráti 1 ak bola operácia úspešná resp 0 ak aktualizácia nebola potrebná. Napríklad nič sa nezhodovalo s podmienkou.

6.4. Prebieha mazanie

Na vymazanie daného záznamu môžeme použiť vymazať metóda z DSLContext objekt. Podmienka odstránenia by mala byť odovzdaná ako parameter v nasledujúcom texte kde doložka:

context.delete (Article.ARTICLE). where (Article.ARTICLE.ID.eq (1)) .execute ();

Vymazávací dotaz sa spustí, až keď zavoláme vykonať metóda. Ako návratová hodnota dostaneme celé číslo, ktoré sa rovná počtu vymazaných záznamov.

Je tiež možné vymazať už načítaný záznam vykonaním jeho vymazať metóda:

ArticleRecord articleRecord = context.fetchOne (Article.ARTICLE, Article.ARTICLE.ID.eq (1)); articleRecord.delete ();

The vymazať metóda sa vráti 1 ak bola operácia úspešná resp 0 ak vymazanie nebolo potrebné. Napríklad keď sa nič nezhodovalo s podmienkou.

7. Záver

V tomto článku sme sa naučili, ako nakonfigurovať a vytvoriť jednoduchú aplikáciu CRUD pomocou rámca jOOQ. Ako obvykle je všetok zdrojový kód k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found