JOOQ objectgeoriënteerde query's - JOOQ Object Oriented Querying

jOOQ
Ontwikkelaar(s) Data Geekery GmbH
Stabiele vrijlating
3.14.8 / 26 februari 2021 ; 7 maanden geleden ( 2021-02-26 )
Opslagplaats github .com /jOOQ /jOOQ
Geschreven in Java
Besturingssysteem Cross-platform
Platform Java
Type Object-relationele mapping
Vergunning Dubbele licentie: ASL 2.0 en commercieel
Website www .jooq .org

jOOQ Object Oriented Querying , algemeen bekend als jOOQ , is een lichte database-mapping softwarebibliotheek in Java die het actieve recordpatroon implementeert . Het doel is om zowel relationeel als objectgeoriënteerd te zijn door een domeinspecifieke taal te bieden om query's te construeren uit klassen die zijn gegenereerd op basis van een databaseschema .

Paradigma

jOOQ beweert dat SQL op de eerste plaats zou moeten komen in elke database-integratie. Het introduceert dus geen nieuwe tekstuele zoektaal , maar maakt het eerder mogelijk om gewone SQL te construeren uit jOOQ-objecten en code die is gegenereerd uit een databaseschema. jOOQ gebruikt JDBC om de onderliggende SQL-query's aan te roepen.

Hoewel het abstractie biedt bovenop JDBC, heeft jOOQ niet zoveel functionaliteit en complexiteit als standaard object-relationele mappingbibliotheken zoals EclipseLink of Hibernate .

De nabijheid van jOOQ tot SQL heeft voordelen ten opzichte van typische object-relationele mappingbibliotheken. SQL heeft veel functies die niet kunnen worden gebruikt in een objectgeoriënteerd programmeerparadigma ; deze reeks verschillen wordt de object-relationele impedantiemismatch genoemd . Door de nabijheid van SQL, jOOQ helpt om te voorkomen dat fouten in de syntaxis en het type mapping problemen. Ook voor variabele binding wordt gezorgd. Het is in jOOQ ook mogelijk om zeer complexe query's te maken, waaronder aliasing, unions , geneste selecties en complexe joins . jOOQ ondersteunt ook database-specifieke functies, zoals UDT's , enum-types , opgeslagen procedures en native functies.

Voorbeeld

Een geneste query die selecteert uit een aliastabel

  -- Select authors with books that are sold out
  SELECT * FROM AUTHOR a
        WHERE EXISTS (SELECT 1
                   FROM BOOK
                  WHERE BOOK.STATUS = 'SOLD OUT'
                    AND BOOK.AUTHOR_ID = a.ID);

En zijn equivalent in jOOQ DSL:

  // Use the aliased table in the select statement
  create.selectFrom(table("AUTHOR").as("a"))
        .where(exists(selectOne()
                     .from(table("BOOK"))
                     .where(field("BOOK.STATUS").equal(field("BOOK_STATUS.SOLD_OUT")))
                     .and(field("BOOK.AUTHOR_ID").equal(field("a.ID")))));

Of eenvoudiger, het genereren van code uit de metadata van de database om constanten te genereren:

  // Use the aliased table in the select statement
  final Author a = AUTHOR.as("a");

  create.selectFrom(a)
        .where(exists(selectOne()
                     .from(BOOK)
                     .where(BOOK.STATUS.equal(BOOK_STATUS.SOLD_OUT))
                     .and(BOOK.AUTHOR_ID.equal(a.ID))));

Zie ook

Referenties

Externe links