A jOOQ használatának megkezdése

1. Bemutatkozás

Ebben az oktatóanyagban egy gyors bemutatót tartunk egy alkalmazás futtatásáról a jOOQ (Java Object Orientated Query) alkalmazással. Ez a könyvtár Java-osztályokat állít elő az adatbázis-táblák alapján, és lehetővé teszi számunkra, hogy folyékony API-ján keresztül típusbiztos SQL-lekérdezéseket hozzunk létre.

Kitérünk a teljes beállításra, a PostgreSQL adatbázis-kapcsolatra és néhány példára a CRUD műveletekre.

2. Maven-függőségek

A jOOQ könyvtárhoz a következő három jOOQ függőségre lesz szükségünk:

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

Szükségünk lesz egy függőségre a PostgreSQL illesztőprogramhoz is:

 org.postgresql postgresql 42.2.16 

3. Adatbázis felépítése

Mielőtt elkezdenénk, hozzunk létre egy egyszerű DB sémát a példáinkhoz. Egy egyszerűt fogunk használni Szerző és egy Cikk kapcsolat:

hozza létre az AUTHOR táblát (ID egész szám ELSŐ KULCS, FIRST_NAME varchar (255), LAST_NAME varchar (255), AGE egész szám); tábla létrehozása ARTICLE (azonosító egész szám ELSŐ KULCS, TITLE varchar (255) nem null, LEÍRÁS varchar (255), AUTHOR_ID egész szám KÖRNYEZET fk_author_id REFERENCES AUTHOR);

4. Adatbázis-kapcsolat

Most nézzük meg, hogyan fogunk csatlakozni az adatbázisunkhoz.

Először meg kell adnunk a felhasználót, a jelszót és az adatbázis teljes URL-jét. Ezeket a tulajdonságokat felhasználjuk a Kapcsolat objektumot a DriverManager és annak getConnection módszer:

String userName = "felhasználó"; Karakterlánc jelszó = "pass"; Karakterlánc URL = "jdbc: postgresql: // db_host: 5432 / baeldung"; Connection conn = DriverManager.getConnection (URL, felhasználónév, jelszó); 

Ezután létre kell hoznunk a DSLContext. Ez az objektum lesz a belépési pontunk a jOOQ interfészek számára:

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

Esetünkben elhaladunk a POSTGRES nyelvjárást, de kevés más elérhető, például H2, MySQL, SQLite stb.

5. Kódgenerálás

Java osztályok előállításához az adatbázis tábláinkhoz a következőkre lesz szükségünk jooq-config.xml fájl:

   org.postgresql.Driver jdbc: postgresql: // db_url: 5432 / baeldung_database felhasználónév jelszó org.jooq.codegen.JavaGenerator org.jooq.meta.postgres.PostgresDatabase public. * com.baeldung.jooq.model C: / projects / / tutorials / jooq-examples / src / main / java 

Az egyéni konfiguráció változtatásokat igényel a szakasz, ahol elhelyezzük az adatbázis hitelesítő adatait és a szakasz, amelyben konfiguráljuk a csomag nevét és helykönyvtárát a generálni kívánt osztályokhoz.

A jOOQ kódgeneráló eszköz futtatásához a következő kódot kell futtatnunk:

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

A generálás befejezése után megkapjuk a következő két osztályt, amelyek mindegyike megfelel az adatbázis-táblájának:

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

6. CRUD Tevékenységek

Most nézzünk meg néhány alapvető CRUD műveletet, amelyeket a jOOQ könyvtárral elvégezhetünk.

6.1. Teremtés

Először hozzunk létre egy újat Cikk rekord. Ehhez meg kell hívnunk a új rekord módszer megfelelő táblázat hivatkozással mint paraméter:

ArticleRecord cikk = context.newRecord (cikk.ARTIKUL);

A Cikk.CIKK változó egy referenciapéldány a CIKK adatbázis tábla. A kódgenerálás során a jOOQ automatikusan létrehozta.

Ezután beállíthatjuk az összes szükséges tulajdonság értékét:

cikk.setId (2); article.setTitle ("jOOQ példák"); article.setDescription ("Néhány példa a jOOQ CRUD műveletekre"); article.setAuthorId (1);

Végül meg kell hívnunk a bolt módszer a rekordon az adatbázisba mentéshez:

cikk.bolt ();

6.2. Olvasás

Most nézzük meg, hogyan olvashatjuk ki az értékeket az adatbázisból. Példaként válasszuk ki az összes szerzőt:

Eredmény-szerzők = context.select (). -Től (Author.AUTHOR) .fetch ();

Itt használjuk a válassza módszerrel kombinálva tól től záradék annak jelzésére, hogy melyik táblából szeretnénk olvasni. A elhozni metódus végrehajtja az SQL lekérdezést, és visszaadja a létrehozott eredményt.

A Eredmény objektum valósítja meg a Iterálható kezelőfelületet, így könnyen iterálni lehet az egyes elemeken. És bár egyetlen rekordhoz hozzáférünk, megkapjuk a paramétereit a getValue módszer megfelelő terepi referenciával:

author.forEach (szerző -> {Egész szám id = szerző.getValue (Szerző.AUTHOR.ID); String keresztnév = szerző.getValue (Szerző.AUTHOR.FIRST_NAME); Karakterlánc vezetéknév = szerző.getValue (Szerző.AUTHOR.LAST_NAME); Egész életkor = szerző.getValue (Szerző.AUTHOR.AGE); System.out.printf ("A szerző% s% s azonosítója:% d és kora:% d% n", keresztnév, vezetéknév, id, életkor);} );

Korlátozhatjuk a kiválasztott lekérdezést egy meghatározott mezőre. Csak a cikkek azonosítóit és címeit töltsük le:

Eredmény articles = context.select (Article.ARTICLE.ID, Article.ARTICLE.TITLE). -től (Author.AUTHOR) .fetch ();

Kiválaszthatunk egyetlen objektumot is a fetchOne módszer. Ennek paraméterei a táblázat referenciája és a megfelelő rekordnak megfelelő feltétel.

Esetünkben válasszunk csak ki egy Szerző 1 azonos azonosítóval:

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

Ha egyetlen rekord sem felel meg a feltételnek, a fetchOne módszer visszatér nulla.

6.3. Frissítés

Egy adott rekord frissítéséhez használhatjuk a frissítés módszer a DSLContext objektum kombinálva a készlet metódus meghívások minden olyan területen, amelyet meg kell változtatnunk. Ezt az állítást követnie kell a hol megfelelő feltételű záradék:

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

A frissítési lekérdezés csak akkor fut, ha meghívjuk a végrehajtani módszer. Visszatérési értékként egy egész számot kapunk, amely megegyezik a frissített rekordok számával.

A már letöltött rekordok végrehajtásával is frissíthető bolt módszer:

ArticleRecord Article = context.fetchOne (cikk.ARTIKUL, cikk.ARTIKUL.ID.eq (1)); article.setTitle ("Új cikkcím"); cikk.bolt ();

A bolt módszer visszatér 1 ha a művelet sikeres volt, vagy 0 ha a frissítés nem volt szükséges. Például semmi sem felelt meg a feltételnek.

6.4. Törlés

Adott rekord törléséhez használhatjuk a töröl módszer a DSLContext tárgy. A törlési feltételt paraméterként kell átadni a következőkben hol kikötés:

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

A törlési lekérdezés csak a futtatását követően fut végrehajtani módszer. Visszatérési értékként egy egész számot kapunk, amely megegyezik a törölt rekordok számával.

A már letöltött rekordok végrehajtásával is törölhető töröl módszer:

ArticleRecord ArticleRecord = context.fetchOne (cikk.ARTIKUL, cikk.ARTIKUL.ID.eq (1)); articleRecord.delete ();

A töröl módszer visszatér 1 ha a művelet sikeres volt, vagy 0 ha a törlésre nem volt szükség. Például, amikor semmi sem felelt meg a feltételnek.

7. Következtetés

Ebben a cikkben megtanultuk, hogyan kell konfigurálni és létrehozni egy egyszerű CRUD alkalmazást a jOOQ keretrendszer használatával. Szokás szerint az összes forráskód elérhető a GitHubon.