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.